如何根据前一天的值对值进行分类或分组?

3qpi33ja  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(267)

我有一个数据集,每天重复和显示销售。如果一个产品在第一天发布,销量在1-5之间,如果第二天的销量在10-50之间,我想把它归类为“限量销售”
如果一个产品在第一天发布并且有超过1000个销售,如果在第二天它有超过1000个销售,我想把它归类为“广泛销售”
如何在标准sql中执行此操作?
我尝试过使用case-when时使用一些变通方法,但最终会遇到问题,因为虽然我可以用输出对第1列进行分类,但我无法使第2列的输出也基于第1列的输出(例如,第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
uxhixvfz

uxhixvfz1#

这就是你想要的吗?

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 .

相关问题