SQL - sum(第1列+第2列+第3列)并选择每个组中sum的最大值

时间:2014-07-27 08:10:13

标签: mysql sql

以下是包含示例数据的表格

id|group_id|column1|column2|column3| 
--------------------------------------
1    1    |    1        1        0
2    1    |    1        1        1
3    2    |    0        0        0
4    2    |    1        1        1
5    1    |    1        0        0
6    3    |    0        0        0

预期结果集:(结果应显示每组中的最大金额(col 1 + col 2 + col 3))

id|group_id|column1|column2|column3| 
--------------------------------------
2    1    |    1        1        1
4    2    |    1        1        1
6    3    |    0        0        0

实际结果集:(选择*,max(m.column1 + m.column2 + m.column3)作为my_table m group by m.group_id的总数),这是错误的

id|group_id|column1|column2|column3|total| 
------------------------------------------
1    1    |    1        1        0      3 
3    2    |    0        0        0      3
6    3    |    0        0        0      0  

我对SQL很陌生,似乎查询选择了每个组中的第一个id。

获得预期结果的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

看起来您正在尝试获取每组中产生最多3列总和的行:

select a.*
from my_table a
join (
  select group_id, max(column1 + column2 + column3) summation
  from my_table
  group by group_id) b on a.group_id = b.group_id and a.column1 + a.column2 + a.column3 = b.summation;

答案 1 :(得分:1)

您可以通过子选择获得所需的结果:

第一步:

SELECT
    MAX(m1.column1 + m1.column2 + m1.column3)
FROM
    my_table m1
GROUP BY
    m1.group_id

将获得每组group_id的最大总数。

由于非聚合列中的值是不确定的,如果此列包含组的不同值,则不能简单地按照您的方式进行聚合,但使用第一步中的查询的子选择将执行此操作:

完整查询

SELECT
     *,
     m.column1 + m.column2 + m.column3 as total
FROM
    my_table m
WHERE
    m.column1 + m.column2 + m.column3 = (
    SELECT
        MAX(m1.column1 + m1.column2 + m1.column3)
    FROM
        my_table m1
    WHERE
        m.group_id = m1.group_id
    GROUP BY
        m1.group_id
);

<强> Demo

答案 2 :(得分:0)

您没有准确指定必须返回column1,column2和column3的值。

select m.*,n.* from 
  m,
  (select 
    group_id as n_group_id, 
    max(column1+column2+column3) as n_total 
  from m group by group_id) as n 
where m.group_id=n_group_id and (column1+column2+column3)=n_total