在PostgreSQL中,having子句的别名
在 MySQL 中本应可用的 having 子句的别名却无法使用。
在PostgreSQL中,不能在SELECT语句的HAVING子句中使用别名。
SELECT
status,
count(*) AS status_count
FROM
Users
GROUP BY status
HAVING status_count > 10;
在PostgreSQL中,HAVING子句在执行顺序上优先于SELECT子句进行评估。
因此,在PostgreSQL中需要按照以下方式编写。
SELECT
status,
count(*) AS status_count
FROM
"Users"
GROUP BY status
HAVING count(*) > 10;
我注意到同一个count(*)被重复写了两次,感到困扰。
当count(*)的部分变成更复杂的计算式或条件分支时,可能会变得冗长。
可以漂亮地写
WITH user_status_counts as (
SELECT
status,
count(*) AS status_count
FROM
"Users"
GROUP BY status
)
SELECT * from user_status_counts usc WHERE usc.status_count > 10;
使用WITH的话,count(*)那部分应该可以在一次内就完成。