如何使用SQL统计同一日期同时出现1和0事件的客户行为发生次数
解决方案
核心思路是按id(客户ID)和date(事件日期)分组,判断每组内是否同时存在event=1和event=0两类事件,对满足条件的组计数即可。
SELECT COUNT(*) AS total_valid_count FROM ( SELECT id, date FROM 你的表名 -- 日期范围过滤条件,不需要统计指定范围可删除 WHERE date >= 'YYYY-MM-DD' AND date <= 'YYYY-MM-DD' GROUP BY id, date -- 校验同客户同日期同时存在两类事件 HAVING COUNT(DISTINCT event) = 2 ) AS valid_records;
结果说明
你提供的示例数据运行该SQL后返回结果为1,仅ID为1的客户在2021/10/1满足条件。
扩展用法
如果需要按日期维度统计每天符合条件的客户数量,可修改为以下写法:
SELECT date, COUNT(*) AS daily_valid_customer_count FROM ( SELECT id, date FROM 你的表名 WHERE date >= 'YYYY-MM-DD' AND date <= 'YYYY-MM-DD' GROUP BY id, date HAVING COUNT(DISTINCT event) = 2 ) AS valid_records GROUP BY date ORDER BY date;
如果你的event字段仅存在0、1两个取值,可将HAVING COUNT(DISTINCT event) = 2替换为SUM(CASE WHEN event = 1 THEN 1 ELSE 0 END) >= 1 AND SUM(CASE WHEN event = 0 THEN 1 ELSE 0 END) >= 1,执行效率更高。
内容的提问来源于stack exchange,提问作者Nick C
相关产品推荐
相关产品推荐

