使用world.sql时SQL聚合查询排序报错1064,求语法修正指导
问题分析与解决
你报错的核心原因是把排序关键字DESC放在了GROUP BY子句后面,这是SQL语法错误——GROUP BY仅用于指定分组字段,排序逻辑需要通过ORDER BY子句实现,且必须放在GROUP BY之后。
修正后的SQL语句
SELECT la.language, la.Isofficial AS Isofficial, SUM(country.Population * la.Percentage / 100) AS pop_tot FROM country INNER JOIN countrylanguage AS la ON la.countryCode = country.Code WHERE la.language != "Spanish" AND la.Isofficial = "T" GROUP BY la.Language ORDER BY la.Language DESC; -- 将排序逻辑移到ORDER BY子句中
如果需要按计算出的pop_tot降序排序,只需把ORDER BY的字段换成pop_tot:
SELECT la.language, la.Isofficial AS Isofficial, SUM(country.Population * la.Percentage / 100) AS pop_tot FROM country INNER JOIN countrylanguage AS la ON la.countryCode = country.Code WHERE la.language != "Spanish" AND la.Isofficial = "T" GROUP BY la.Language ORDER BY pop_tot DESC;
额外说明
- 旧写法中
GROUP BY la.Language DESC属于语法误用,MySQL会识别为无效语法,因此抛出1064错误。 - 无需将结果存入临时表再排序,直接在原查询末尾添加
ORDER BY子句即可实现排序需求。
内容的提问来源于stack exchange,提问作者Gimbor
相关产品推荐
相关产品推荐

