繁体   English   中英

SQL-总和(第1列+第2列+第3列),然后在每个组中选择总和的最大值

[英]SQL - sum (column 1 + column2 + column3 ) and select max value of sum in each group

这是我的示例数据表:

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组的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列的总和最高的行:

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;

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

第一步:

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
);

演示

您没有确切指定必须返回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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM