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