postgres:选择分组依据中使用的表达式

时间:2019-03-27 15:15:32

标签: sql postgresql group-by

我想按一些复杂的表达式分组,并且希望能够选择该表达式

select
  (date_part('minute',(period_start - :start)) / 6), -- problematic row
  max(high) as high
from x where ...
group by
  (date_part('minute',(period_start - :start)) / 6)

所有工作都没有“问题行”。添加该行后,即使它与按表达式分组相同,我也会收到错误:

  

错误:列“ x.period_start”必须出现在GROUP BY子句中或在聚合函数中使用

1 个答案:

答案 0 :(得分:1)

我通常会摆脱一些问题,例如您提到的使用CTE(公用表表达式)的问题。我只会在cte中计算一次表达式,然后根据需要使用多次。

例如,我将您的查询改写为:

with
cte1 as (
  select
    (date_part('minute',(period_start - :start)) / 6) as mins,
    high
  from x where ...
)
select mins, max(high) as high
from cte1
group by mins