2016-09-29 67 views
3

我的數據庫:使用組功能

+++++++++++++++++++++++++++++++++++++ 
+ 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 + 
+++++++++++++++++++++++++++++++++++++ 

我想要做這樣的事情:

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 + 
++++++++++++++++++++++++ 

我用左手此查詢加入,這就是爲什麼我不知道之前,其中值inside_id包含,我只需要價值的總和時,inside_id在當前組中最大,問題是組功能內部組功能不工作並導致「組功能無效」。

順便說一句inside_id對於group_id只包含兩種可能性。

回答

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-query將使用correlated sub-queryconditional aggregate找到最大inside_id每個group_id

另一種方法是什麼的一些類似於當前的嘗試。

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