引用Postgres中having子句中的select聚合列别名

时间:2015-09-23 03:05:04

标签: mysql sql postgresql

我正在从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子句中使用列别名的设置?

2 个答案:

答案 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