首页 > 解决方案 > Postgres:在我使用聚合函数时必须出现在 GROUP BY

问题描述

当我如下运行 sql 时,我收到以下错误消息:

subQuery.numbers必须出现在GROUP BY子句中或在聚合函数中使用**"

我不明白为什么在使用聚合函数和别名时会出现此sum错误。countleft join

我认为父查询无法识别带有别名(“subQuery”)的子查询。

我正在尝试找到解决方案,但我没有找到像我这样的其他案例。您能否解释一下为什么在使用聚合函数时会出现此错误?

select to_char(customer1.date_time, 'MM-dd') as DateTime, 
(case when subQuery.numbers is null then 0 else subQuery.numbers end) as "2019-numbers", 
(case when subQuery.amount is null then 0 else subQuery.amount end) as "2019-amount"
from customer_table customer1
left join (
select to_char(customer2.date_time, 'MM-dd') as DateTime,
count(*) as numbers,
sum(amount) as amount
from customer_table customer2
where customer2.date_time > date_trunc('day', (now() - interval '1 day') - interval '1 year')
and customer2.date_time < date_trunc('day', now() - interval '1 year')
and customer2.status  = 'OK'
group by  to_char(customer2.date_time, 'MM-dd')) as subQuery on subQuery.DateTime = to_char(customer1.date_time, 'MM-dd') 
where customer1.date_time > date_trunc('day', now() - interval '1 day')
and customer1.date_time < current_date - interval '1 day' + time '23:59'
group by to_char(customer1.date_time, 'MM-dd');

标签: sqlpostgresqlgroup-by

解决方案


只需将subQuery.numbersand subQuery.amount(它们出现在SELECT列表中)添加到GROUP BY子句中。

否则,应该使用subQuery.numbers属于一个的几个中的哪一个?to_char(customer1.date_time, 'MM-dd')


推荐阅读