MySQL中ORDER BY子句未生效?求助排查排序异常问题
排序失效的原因与修复方案
问题出在ORDER BY子句的写法上:你用单引号'Total Consumption'包裹别名,这会让SQL把它当成字符串常量,而非你定义的列别名。由于所有行的这个字符串常量值都相同,数据库会默认使用GROUP BY的Country字段作为排序依据,也就是你看到的字母顺序。
修复方案1:正确引用带空格的别名
使用反引号(MySQL/MariaDB等)或双引号(PostgreSQL/SQL Server等,部分需开启兼容模式)包裹别名:
SELECT Country, ROUND(SUM(Consumption), 2) AS `Total Consumption` FROM alcohol GROUP BY Country ORDER BY `Total Consumption` DESC;
修复方案2:直接使用聚合函数排序
跳过别名,直接用聚合表达式指定排序规则,结果一致且更稳妥:
SELECT Country, ROUND(SUM(Consumption), 2) AS `Total Consumption` FROM alcohol GROUP BY Country ORDER BY SUM(Consumption) DESC;
内容的提问来源于stack exchange,提问作者Nathan Stone
相关产品推荐
相关产品推荐

