mysql - 从 MySQL 数据库中获取按字段分组的最高值的行

标签 mysql sql

我有下表

+----+----------+-----+
| id | priority | sub |
+----+----------+-----+
| 1  |    1     |  A  |
| 2  |    3     |  A  |
| 3  |    4     |  A  |
| 4  |    2     |  B  |
| 5  |    9     |  B  |
+----+----------+-----+

我正在尝试获取每个子项具有最高优先级的行。所以这个结果:

+----+----------+-----+
| id | priority | sub |
+----+----------+-----+
| 3  |    4     |  A  |
| 5  |    9     |  B  |
+----+----------+-----+

我尝试过分组,但这会产生不可预测的结果。我的猜测是一个嵌套查询,首先开始找到最高优先级,如下所示:

select max(priority),sub from t group by sub

这给了我

+----------+-----+
| priority | sub |
+----------+-----+
|    4     |  A  |
|    9     |  B  |
+----------+-----+

但是我也需要ID,添加到查询中显然给了我错误的ID,将此结果与同一个表上的查询连接起来给了我一个错误(ER_NONUNIQ_TABLE(1066)),这是有道理的......任何人能把我推向正确的方向吗?

最佳答案

子查询背后的想法是,它分别获取每个 SUBPRIORITY 的最大值。其结果将被连接回原始表。

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  sub, max(priority) maxVal
            FROM    tableName
            GROUP BY sub
        ) b ON a.sub = b.sub AND
                a.priority = b.maxVal

关于mysql - 从 MySQL 数据库中获取按字段分组的最高值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13923472/

相关文章:

mysql - 计算每个唯一 ID 的过期和未过期行数

php - SQL conn 在使用 POST 和 header (位置)进行评级时失败

600 000 条记录的 MySQL 选择查询优化

php - Group Concat 重复区域的使用

php - 使用 PHP 和 MySQL 登录到管理员 - 成员(member)网站 - 登录不工作

sql - 仅选择最后一次尝试

php - while 循环仅显示数据库中的第一行

java - JPA 查询验证日期以及自该日期以来的天数是否> 50

mysql - "ORDER BY ' column_name ' DESC",但是字母前的数字需要两个语句?

mysql - 将两行合并为一行