如何执行条件计数以统计车辆关联2台/3台设备的次数
实现方案
这个需求可以通过两层聚合完成,需要用到子查询,同时也可以用条件计数实现你提到的带判断的统计逻辑,具体实现如下:
步骤说明
- 先按日期和车辆分组,统计每辆车单日关联的设备数量
- 再按车辆分组,分别统计设备数等于2、等于3的天数,就是你要的结果
参考SQL代码(兼容MySQL/PostgreSQL等主流数据库)
SELECT vehicle, -- 统计关联2台设备的次数 COUNT(CASE WHEN device_count = 2 THEN 1 END) AS `2 Devices`, -- 统计关联3台设备的次数 COUNT(CASE WHEN device_count = 3 THEN 1 END) AS `3 Devices` FROM ( -- 子查询:计算每辆车每天关联的设备数 SELECT cdts, vehicle, COUNT(DISTINCT device) AS device_count FROM 你的表名 GROUP BY cdts, vehicle ) AS daily_stat GROUP BY vehicle ORDER BY vehicle;
逻辑说明
- 子查询里的
COUNT(DISTINCT device)是为了避免同天同车出现重复设备记录的问题,如果你能保证数据没有重复,去掉DISTINCT也可以 - 外层的条件COUNT逻辑是:当设备数符合要求时返回值,否则返回NULL,COUNT会自动忽略NULL值,就实现了按条件计数的效果,和你提到的「带where条件的count」逻辑一致,最终输出结果和你给出的预期完全匹配。
内容的提问来源于stack exchange,提问作者Likemike90
相关产品推荐
相关产品推荐

