gpt4 book ai didi

sql - Redshift - 聚合函数调用可能没有嵌套聚合或窗口函数

转载 作者:行者123 更新时间:2023-12-03 21:26:23 24 4
gpt4 key购买 nike

我正在尝试构建一个 SQL 查询,该查询将计算基于某些值的销售额总和,如下所示:

下面给出了我的数据集的情况:

cust_name,sales_count,day_count
cust_a,100,3
cust_a,200,5
cust_a,150,7
cust_a,120,1
cust_a,180,10
cust_a,100,8
cust_b,20,3
cust_b,10,4
cust_b,50,6
cust_b,60,8
cust_b,15,9

我想获得以下格式的输出
cust_name,sales_count,day_count
cust_a,280,last_14
cust_a,450,last_7
cust_b,85,last_14
cust_b,80,last_7

下面给出的是我试图建立的案例陈述
select cust_name, 
sum(case when day_count > 7 then count(sales_count) else 0 end) as count_14,
sum(case when day_count < 7 then count(sales_count) else 0 end) as count_7
from sales
group by cust_name;

我正在使用 Amazon Redshift 数据库。

在此链接 ( Amazon Redshift - Get week wise sales count by category ) 中发现了类似的问题,但我一直收到 聚合函数调用可能没有嵌套的聚合或窗口函数 .

任何人都可以帮助解决这个问题。谢谢。

最佳答案

根据您的问题,您可以尝试此查询。

使用 SUMCASE WHEN表达。

select cust_name, 
sum(case when day_count > 7 then sales_count else 0 end) as count_14,
sum(case when day_count < 7 then sales_count else 0 end) as count_7
from sales
group by cust_name;

编辑:

因为 Aggregate functions不能嵌套多次。

如果你想修复
sum(case when day_count > 7 then count(sales_count) else 0 end) 

您可以尝试编写子查询来修复它。
SELECT cust_name,
sum(case when day_count > 7 then cnt else 0 end) as count_14,
sum(case when day_count < 7 then cnt else 0 end) as count_7
FROM (
SELECT cust_name,(case when day_count > 7 then 1
when day_count < 7 then 2
else null
end) grp,
count(sales_count) cnt
FROM sales
GROUP BY cust_name,
(case when day_count > 7 then 1
when day_count < 7 then 2
else null
end)
)t
WHERE grp is not null
GROUP BY cust_name

关于sql - Redshift - 聚合函数调用可能没有嵌套聚合或窗口函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50923865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com