我的数据库:

+++++++++++++++++++++++++++++++++++++
+ 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_idgroup_id 只包含两种可能性。

最佳答案

尝试这样的事情

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 将找到每个 inside_id 的最大 group_id
另一种使用 correlated sub-queryconditional 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

关于mysql - 在组函数中使用组函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39775668/

10-12 15:52