我想按一些复杂的表达式分组,并且希望能够选择该表达式
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子句中或在聚合函数中使用
答案 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