到目前为止,非重复客户价值的总和

时间:2018-06-02 17:32:37

标签: sql hive hiveql

我有一个列表,其中包含日期和每个日期的所有客户状态(一个字段用于活动,另一个用于非活动) 在给定的日历日期之前,如何计算非重复客户的每个标志的数量?

calendar_date   customer_uid    active_flag     inactive_flag
2016-09-10          500             1               0
2016-09-10          501             0               0
2016-09-10          509             1               0
2016-09-11          509             1               0
2016-09-11          500             1               0
2016-09-11          501             0               0
2016-09-12          500             1               0
2016-09-12          501             1               0
2016-09-12          509             1               0
2016-09-13          500             0               1
2016-09-13          501             1               0
2016-09-13          509             1               0
2016-09-14          500             0               1
2016-09-14          501             1               0
2016-09-14          509             0               1

结果如下:

calendar_date   active_flag     inactive_flag
2016-09-10          2               0
2016-09-11          2               0
2016-09-12          3               0
2016-09-13          2               1
2016-09-14          1               2

1 个答案:

答案 0 :(得分:2)

您需要使用SUM函数和GROUP BY

SELECT calendar_date,SUM(active_flag) active_flag,SUM(inactive_flag) inactive_flag 
FROM T
GROUP BY calendar_date

如果active_flaginactive_flag状态超过两个

您可以将case when表达式与聚合函数一起使用。

SELECT calendar_date,
       COUNT(CASE WHEN active_flag = 1 THEN 1 END) active_flag,
       COUNT(CASE WHEN inactive_flag = 1 THEN 1 END) inactive_flag 
FROM T
GROUP BY calendar_date