无法识别列别名

Column alias is not recognized

这个最小的例子应该从时间戳中提取年份,然后计算给定年份的一些东西。

SELECT EXTRACT(YEAR FROM rental_ts) as year,
       COUNT(DISTINCT rental_id)
FROM rental
GROUP BY year
HAVING year=2020

运行它,我得到一个错误column "year" does not exist。这是什么原因?

唉,原来如此。不允许使用列别名。一种解决方案是重复表达式:

SELECT EXTRACT(YEAR FROM rental_ts) as year,
       COUNT(DISTINCT rental_id)
FROM rental
GROUP BY year
HAVING EXTRACT(YEAR FROM rental_ts) = 2020;

更好的解决方案是在聚合之前过滤[=​​18=]:

SELECT EXTRACT(YEAR FROM rental_ts) as year,
       COUNT(DISTINCT rental_id)
FROM rental
WHERE rental_ts >= '2020-01-01' AND rental_ts < '2021-01-01'
GROUP BY year;

这更好,原因有二。首先,它是索引(和分区)兼容的。其次,它减少了聚合所需的数据量。