mysql - SQL - sum (column 1 + column2 + column3 ) 并在每组中选择总和的最大值

标签 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

实际结果集: (select *, max(m.column1 + m.column2 + m.column3) as total from 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。

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

最佳答案

你可以得到你想要的结果,即使用子选择:

第一步:

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

关于mysql - SQL - sum (column 1 + column2 + column3 ) 并在每组中选择总和的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24979121/

相关文章:

mysql - 在 MySQL 中为给定数据库创建用户?

sql - 寻求有关此 table 上足球游戏数据库设计的帮助/验证

mysql - MySQL shell 中奇怪的时间戳输出

mysql - Sqoop导入 “--where”标志

MySQL:选择除列外仅具有唯一值的行

php - 左连接显示 2 个结果,而本应为 0

sql - 选择列值,其中其他列为组的最大值

mysql - 复杂的mysql查询DISTINCT

php - 如何避免 MySQL InnoDB 中的竞争条件?

Mysql 警告代码 1592 使用语句格式写入二进制日志的不安全语句