Mysql 使用“分组依据”时,如何通过强制执行订单?

Mysql 使用“分组依据”时,如何通过强制执行订单?,mysql,sql,Mysql,Sql,我有一个SQL: SELECT itemId, parentId, value FROM item ORDER BY value DESC 正确返回: +--------+------------------+ | itemId | parentId | value | +--------+------------------+ | 1 | 5 | 500 | | 4 | 1 | 500 | | 2 | 5 |

我有一个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 |
+--------+----------+-------+

对于每个
itemId
,仅当其
是其
parentId
MAX
时才选择它:

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

| ITEMID | PARENTID | VALUE |
-----------------------------
|      1 |        5 |   500 |
|      4 |        1 |   500 |

从项目组中选择itemId、parentId、max(value)作为val,按parentId排序,按val desc这会给我类似于[itemId=2,parentId=5,value=10,val=500]的结果。我需要返回与最高值关联的正确itemId,而不仅仅是最高值本身。是的,这很有效!对于两个itemid具有相同的parentId和值(我只想要一个)的情况,我必须添加groupby,并且orderby保持最大值优先于任何parentId。