以下是包含示例数据的表格
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。
获得预期结果的最佳方法是什么?
答案 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