SQL查询如何先按平均值降序排序,同值时再按字母序排序?
SQL排序逻辑修正
你写的查询有两处需要调整:
ORDER BY子句里用单引号包裹ClassificationAvg是不规范的错误写法:SQL中单引号用来标识字符串常量,并非字段/别名的标识符,部分数据库的宽松模式下可能碰巧识别,但兼容性差,极端情况会出现排序不符合预期的问题。- 没有配置平均评分相同时的次级排序规则。
修正后的完整SQL代码:
SELECT f.title, ROUND(AVG(CAST(Stars AS FLOAT)), 2) AS ClassificationAvg FROM film f JOIN classification cl ON f.fID = cl.fID GROUP BY f.title ORDER BY ClassificationAvg DESC, f.title ASC;
如果你使用的数据库强制要求对别名加引用标识,不要用单引号:MySQL环境用反引号包裹别名,PostgreSQL、SQL Server等环境用双引号包裹别名即可,例:MySQL下可写为
ORDER BY `ClassificationAvg` DESC, f.title ASC
排序规则和你预期完全一致:优先按照ClassificationAvg平均评分降序排列,评分相同的影片会自动按照片名字段的A-Z自然字母顺序升序排列。
内容的提问来源于stack exchange,提问作者jmsbs
相关产品推荐
相关产品推荐

