Mysql 使用“分组依据”时,如何通过强制执行订单?
我有一个SQL: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 |
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。