Mysql5.7版本中,查询分组GROUP BY通过子查询中ORDER BY进行排序无效的问题解决办法
在MySQL 5.7中,如果你在子查询中使用了ORDER BY
子句,然后在外层查询中使用了GROUP BY
,可能会发现ORDER BY
似乎没有效果。这是因为在MySQL中,ORDER BY
应该只用于最终结果的排序,而不是用于中间步骤的排序。
为了解决这个问题,你可以使用GROUP BY
子句来确保数据的分组正确,并在外层查询中使用ORDER BY
来保证最终结果的排序。
例如,如果你有以下查询:
SELECT id, name, MAX(score) AS max_score
FROM users
GROUP BY id
ORDER BY max_score DESC;
这个查询首先会按照id
分组,然后在每个分组内找出score
的最大值,并按照max_score
的降序排列结果。
如果你发现ORDER BY
在子查询中不起作用,你可以尝试将子查询重写为一个正常的表表达式(subquery -> Common Table Expression, CTE),然后在外层查询中进行排序。例如:
WITH RankedUsers AS (
SELECT id, name, score
FROM users
ORDER BY score DESC
)
SELECT id, name, score
FROM RankedUsers
GROUP BY id
ORDER BY score DESC;
在这个例子中,CTE RankedUsers
首先对用户进行了分组,并按照score
的降序排列。然后外层查询再对这个结果进行分组,并按照score
的降序排列最终结果。这样就可以绕过子查询中ORDER BY
可能不起作用的问题。
评论已关闭