为何SQL聚合函数别名含空格报错,同名别名却正常?
问题描述
执行以下SQL查询时抛出错误:
SELECT id, SUM(seats) AS Total seats FROM bookings GROUP BY id ORDER BY Total seats;
错误提示:
ERROR: syntax error at or near "seats"
但执行下面的查询却能正常运行:
SELECT id, SUM(seats) AS seats FROM bookings GROUP BY id ORDER BY seats;
想弄明白其中的原因。
原因解析
核心问题是SQL的标识符命名规则:
- 当别名包含空格(比如
Total seats)时,数据库会将其拆成Total和seats两个独立的语法单元,无法识别这是一个完整的别名,因此触发语法错误。 - 第二个查询里的别名
seats是连续的单个单词,符合SQL对标识符的命名要求,数据库可以正确识别这个别名,不管是在SELECT子句还是ORDER BY子句中都能正常解析。
如果确实需要使用带空格的别名,必须用双引号将别名包裹起来,修改后的查询就能正常执行:
SELECT id, SUM(seats) AS "Total seats" FROM bookings GROUP BY id ORDER BY "Total seats";
内容的提问来源于stack exchange,提问作者hta72
相关产品推荐
相关产品推荐

