如何编写SQL查询统计EventHistory表不同事件类型的发生次数?
SQL查询解法
你可以使用条件聚合实现需求,该写法兼容MySQL、PostgreSQL、SQL Server等所有主流关系型数据库,具体查询语句如下:
SELECT A, B, -- 统计schedule和manual_schedule两类事件的总数量 SUM(CASE WHEN eventType IN ('schedule', 'manual_schedule') THEN 1 ELSE 0 END) AS schedule_total_cnt, -- 统计cancel类型事件的数量 SUM(CASE WHEN eventType = 'cancel' THEN 1 ELSE 0 END) AS cancel_cnt FROM EventHistory -- 按复合主键分组 GROUP BY A, B;
补充说明
如果你的数据库支持IF函数(比如MySQL),也可以使用更简洁的写法:
SELECT A, B, SUM(IF(eventType IN ('schedule', 'manual_schedule'), 1, 0)) AS schedule_total_cnt, SUM(IF(eventType = 'cancel', 1, 0)) AS cancel_cnt FROM EventHistory GROUP BY A, B;
对应你提供的示例数据,执行上述SQL后输出结果如下:
| A | B | schedule_total_cnt | cancel_cnt |
|---|---|---|---|
| 249106 | 1956901101 | 2 | 1 |
| 249128 | 1956904001 | 3 | 1 |
| 249240 | 1956932501 | 12 | 2 |
内容的提问来源于stack exchange,提问作者shreyak jain
相关产品推荐
相关产品推荐

