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

时间:2012-12-17 22:42:43

标签: mysql sql

我有下表

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

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

+----+----------+-----+
| 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)),这是有道理的...任何人能把我推向正确的方向吗?

1 个答案:

答案 0 :(得分:3)

子查询背后的想法是它为每个PRIORITY分别获得SUB的最大值。其结果将被连接回原始表格。

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