![](/img/trans.png)
[英]MySQL SUM column1 if column2 equals today and column3 equals specific test
[英]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.