2016-09-29 91 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