如何在使用GROUP BY时强制执行ORDER BY?

时间:2012-09-23 17:08:36

标签: mysql sql

我有这个SQL:

SELECT itemId, parentId, value FROM item ORDER BY value DESC

正确返回:

+--------+------------------+
| itemId | parentId | value |
+--------+------------------+
|      1 |        5 |   500 |
|      4 |        1 |   500 |
|      2 |        5 |    10 |
|      5 |        1 |    10 |
|      3 |        5 |     0 |
|      6 |        1 |     0 |
+--------+----------+-------+

我尝试添加“GROUP BY parentId”,但这似乎选择了两个随机项,忽略了ORDER BY子句:

+--------+------------------+
| itemId | parentId | value |
+--------+------------------+
|      2 |        5 |    10 |
|      6 |        1 |     0 |
+--------+----------+-------+

我应该使用什么SQL来仅返回每个parentId具有最高值的项目?:

+--------+------------------+
| itemId | parentId | value |
+--------+------------------+
|      1 |        5 |   500 |
|      4 |        1 |   500 |
+--------+----------+-------+

2 个答案:

答案 0 :(得分:1)

对于每个itemId,只有在value为其MAX的{​​{1}}时才选择它:

parentId

返回:

SELECT itemId, parentId, value
FROM item i
WHERE value = (SELECT MAX(value) 
               FROM item t 
               WHERE t.parentId = i.parentId)

<强> DEMO

答案 1 :(得分:1)

我相信这个问题在之前的类似问题中得到了回答:

How can I SELECT rows with MAX(Column value), DISTINCT by another column in SQL?