我正在从MySQL迁移到Postgres。在MySQL中我可以使用
select sum(clicks) c from table where event_date >= '1999-01-01'
group by keyword_id
having c > 10
Postgres发出错误
错误:列“c”不存在
在Postgres中,我必须在having子句中重复该函数
select sum(clicks) c from table where event_date >= '1999-01-01'
group by keyword_id
having sum(clicks) > 10
代码中有很多地方需要改变。 Postgres中是否有一个允许它在having子句中使用列别名的设置?
答案 0 :(得分:6)
Postgres中是否有设置允许它在having子句中使用列别名?
没有。允许引用SELECT
的实现 - HAVING
中的列表条目超出了标准。
您应该使用子查询,例如
select
c
from (
select
sum(clicks) c
from table
where event_date >= '1999-01-01'
group by keyword_id
) x
where c > 10;
...或重复聚合。
答案 1 :(得分:3)
您可以使用WITH Queries (Common Table Expressions)来实现以下结果
WITH t
AS (
SELECT sum(clicks) c
FROM TABLE
WHERE event_date >= '1999-01-01'
GROUP BY keyword_id
)
SELECT c
FROM t
WHERE c > 10