如何编写需使用group by的员工状态统计SQL查询
员工状态统计SQL实现
表结构说明
你使用的员工状态记录表结构如下:
Columns: name varchar status varchar id varchar
status字段可选值为online、offline、away、busy,表会定期存储所有员工不同时间点的状态快照。
统计规则
你需要的统计逻辑如下:
- 员工只要有过至少1次
busy状态,最终展示为busy - 员工从未出现过
busy,但至少有过1次online状态,最终展示为available - 员工从未出现过
online和busy状态,最终展示为not available
可直接运行的SQL语句
该语句兼容MySQL、PostgreSQL、SQL Server等绝大多数主流数据库,替换表名即可使用:
SELECT name, CASE -- 优先判断是否有过busy状态 WHEN SUM(CASE WHEN status = 'busy' THEN 1 ELSE 0 END) > 0 THEN 'busy' -- 排除busy的情况后判断是否有过online WHEN SUM(CASE WHEN status = 'online' THEN 1 ELSE 0 END) > 0 THEN 'available' -- 剩余情况返回not available ELSE 'not available' END AS final_status FROM 替换为你的实际表名 GROUP BY name ORDER BY name;
如果需要输出和示例完全一致的带引号格式,可以调整输出字段,以MySQL为例:
SELECT name, CONCAT('"', CASE WHEN SUM(CASE WHEN status = 'busy' THEN 1 ELSE 0 END) > 0 THEN 'busy' WHEN SUM(CASE WHEN status = 'online' THEN 1 ELSE 0 END) > 0 THEN 'available' ELSE 'not available' END, '"') AS final_status FROM 替换为你的实际表名 GROUP BY name ORDER BY name;
用你提供的样本数据运行后,输出结果和你给出的预期样例完全匹配。
内容的提问来源于stack exchange,提问作者Mariners
相关产品推荐
相关产品推荐

