2016-09-29 5 views
3

マイデータベース:使用して、グループ機能

SELECT 
    group_id, 
    SUM(CASE WHEN MAX(inside_id) = inside_id THEN value ELSE 0 END) as sum_value 
FROM table 
GROUP BY group_id 

期待される結果:

++++++++++++++++++++++++ 
+ group_id | sum_value + 
+  1 |  12 + 
+  2 |  164 + 
++++++++++++++++++++++++ 

私は左でこのクエリを使用して、私はこのような何かをしたい

+++++++++++++++++++++++++++++++++++++ 
+ id | group_id | inside_id | value + 
+ 1 |  1 |   1 | 50 + 
+ 2 |  1 |   2 | 12 + 
+ 3 |  1 |   1 |  4 + 
+ 4 |  2 |   3 | 140 + 
+ 5 |  2 |   2 | 81 + 
+ 6 |  2 |   3 | 24 + 
+++++++++++++++++++++++++++++++++++++ 

私が前に知らない理由は、inside_idの値が入っていて、私はちょうどinside_idは現在のグループで最大ですが、グループ機能内のグループ機能が機能せず、 "グループ機能の無効な使用"が発生するという問題があります。

inside_idgroup_idには、2つの可能性しか含まれていません。

答えて

1

この

SELECT group_id, SUM(value) as sum_value 
FROM table A 
Where inside_id = (select max(inside_id) from table B where a.group_id=b.group_id) 
GROUP BY group_id 

のようなものを試してみてくださいsub-querycorrelated sub-queryを使用して、各group_id

別のアプローチの最大inside_idconditional aggregateあなたの現在の試みに似たいくつかの何を見つけるだろう。ここ

SELECT group_id, 
     Sum(CASE 
      WHEN inside_id = (SELECT Max(inside_id) 
           FROM table B 
           WHERE a.group_id = b.group_id) THEN value 
      ELSE 0 
      END) AS sum_value 
FROM table A 
GROUP BY group_id 
+0

、THX –

1

はその後識別するため非相関サブクエリとの結合、及び和を使用するオプション、各グループの最大inside_idを有するレコードです。私が必要とするまさにザッツ

SELECT t1.group_id, SUM(t1.value) AS sum_value 
FROM yourTable t1 
INNER JOIN 
(
    SELECT group_id, MAX(inside_id) AS inside_id 
    FROM yourTable 
    GROUP BY group_id 
) t2 
    ON t1.group_id = t2.group_id AND 
     t1.inside_id = t2.inside_id 
GROUP BY t1.group_id 
0
SELECT group_id,SUM(value) as sum_value 
FROM table 
WHERE group_id<>inside_id 
GROUP BY group_id 
関連する問題