Kev*_*ash 4 sql aggregate-functions amazon-redshift
我正在尝试构建一个 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
Run Code Online (Sandbox Code Playgroud)
我想获得以下格式的输出
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
Run Code Online (Sandbox Code Playgroud)
下面给出的是我试图构建的案例陈述
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;
Run Code Online (Sandbox Code Playgroud)
我正在使用 Amazon Redshift 数据库。
在此链接中发现了类似的问题(Amazon Redshift-按类别获取每周销售计数),但我不断收到聚合函数调用可能没有嵌套聚合或窗口函数。
谁能帮忙解决这个问题。谢谢。
从你的问题来看,你可以尝试这个查询。
使用SUM和CASE 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;
Run Code Online (Sandbox Code Playgroud)
编辑:
因为Aggregate functions不能嵌套多次。
如果你想修复
sum(case when day_count > 7 then count(sales_count) else 0 end)
Run Code Online (Sandbox Code Playgroud)
您可以尝试编写子查询来修复它。
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
Run Code Online (Sandbox Code Playgroud)