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

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-按类别获取每周销售计数),但我不断收到聚合函数调用可能没有嵌套聚合或窗口函数

谁能帮忙解决这个问题。谢谢。

D-S*_*hih 5

从你的问题来看,你可以尝试这个查询。

使用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;
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)