我有一个每天重复一次并显示销售情况的数据集。如果某产品在第1天发布且销售量介于1-5之间,并且在第2天销售量介于10-50之间,那么我要将其归类为“有限销售”。
如果某产品在第1天发布并且销售量超过1000,并且在第2天销售超过1000,我想将其归类为“广泛销售”。
我该如何在标准SQL中执行此操作?
我曾尝试使用CASE WHEN使用一些变通方法,但最终最终遇到了问题,因为尽管我可以用输出对第一列进行分类,但是我无法让第二列具有也基于输出第一个输出(例如,列1为TRUE,但列2为FALSE。我需要的是列1 = TRUE和列2 = True。
这是示例查询的样子:
表如下:
列:名称,日期编号,销售额
1. Jack | 1 | 5
2. Jack | 2 | 10
3. Mary | 1 | 1250
4. Mary | 2 | 1500
SELECT name,
day_number,
sales,
CASE
WHEN day_number = 1
AND sales >= 1
AND sales <= 5
THEN "LIMITED SALES"
ELSE "WIDE SALES"
END AS status_1,
CASE
WHEN day_number = 2
AND sales >= 10
AND sales <= 50
THEN TRUE
ELSE FALSE
END AS status_2
FROM table
不幸的是,这并不能真正让我得到我想要的东西。最后,我希望看到如下结果:
1. Jack | 1 | 5 | LIMITED SALES
2. Jack | 2 | 10 | LIMITED SALES
3. Mary | 1 | 1250 | WIDE SALES
4. Mary | 2 | 1500 | WIDE SALES
答案 0 :(得分:1)
这是您想要的吗?
select name,
(case when sum(case when day_number = 1 then sales end) between 1 and 5 and
sum(case when day_number = 2 then sales end) between 10 and 50
then 'Limited Sales'
when sum(case when day_number = 1 then sales end) > 1000 and
sum(case when day_number = 2 then sales end) > 1000
then 'Wide Sales'
else '???'
end) as sales_category
from t
group by name
如果要在每个原始行上使用,请使用窗口函数或join
。