SQL技术求助:统计员工状态数据并返回单行结果
解决单行返回三类员工统计的SQL问题
我来帮你搞定这个问题~你之前执行的SQL为啥不符合预期呢?因为GROUP BY active会把数据按active的值分成两组(1和0),所以返回的是两行结果,而且列名重复用了total,这显然和你想要的「单行返回总员工数、活跃数、非活跃数」的需求不匹配。
要实现单行返回多个统计值,我们可以用条件聚合的方式,也就是在聚合函数里加入条件判断,把不同条件的统计结果放到同一行的不同列中。这里给你两种可行的方案:
方案一:使用CASE语句明确判断
这种方式逻辑清晰,适合新手理解:
SELECT COUNT(*) AS total_employees, SUM(CASE WHEN active = 1 THEN 1 ELSE 0 END) AS active_employees, SUM(CASE WHEN active = 0 THEN 1 ELSE 0 END) AS inactive_employees FROM it_staff_status;
方案二:利用active字段的0/1特性简化
因为你的active字段只有0和1两种值,我们可以直接用求和来统计活跃数,再通过总数减去活跃数得到非活跃数,代码更简洁:
SELECT COUNT(*) AS total_employees, SUM(active) AS active_employees, COUNT(*) - SUM(active) AS inactive_employees FROM it_staff_status;
结果说明
执行上面任意一个SQL语句后,都会返回一行数据:
| total_employees | active_employees | inactive_employees |
|---|---|---|
| 6 | 4 | 2 |
完全符合你需要的统计结果,列名也清晰合理。
内容的提问来源于stack exchange,提问作者Muhammad Faizan Khan
相关产品推荐
相关产品推荐

