SQL中为何有时无法使用列别名?以growth_perc计算为例
问题解答
核心原因是SQL的执行顺序规则:
- SQL语句的执行流程是先处理
FROM和JOIN部分,确定要查询的数据源;接着处理WHERE(如果存在)过滤行;最后才会执行SELECT子句里的字段选择和别名定义。 - 你在
SELECT里定义的size2010、size2015这些别名,是在SELECT阶段才生成的,而计算growth_perc的逻辑属于SELECT子句的一部分,此时这些别名还没被系统识别,自然没法直接引用。 - 而
p1.size、p2.size是直接从FROM/JOIN阶段确定的表别名中获取的字段,系统在执行计算时能直接找到对应的数据。
如果想简化写法,可以用子查询或者CTE先把别名定义好,再在外层引用:
WITH population_data AS ( SELECT p1.country_code, p1.size AS size2010, p2.size AS size2015 FROM populations AS p1 INNER JOIN populations AS p2 ON p1.country_code = p2.country_code AND p1.year = p2.year - 5 ) SELECT country_code, size2010, size2015, ((size2015 - size2010)/size2010 * 100.0) AS growth_perc FROM population_data;
内容的提问来源于stack exchange,提问作者Aaron Tsai
相关产品推荐
相关产品推荐

