You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将两个不同统计条件的SQL Count查询合并为单条查询?

完全可以通过单条SQL实现,核心采用条件聚合方案即可,仅需一次表扫描就能得到两个维度的统计结果,性能优于两次查询再关联的写法。

通用兼容全数据库写法

该写法支持MySQL、PostgreSQL、SQL Server、Oracle等所有主流关系型数据库:

SELECT
    a.EmployeeId,
    COUNT(CASE WHEN a.jobstatusid <> 5 THEN a.JobStatusId END) AS cTotOut,
    COUNT(CASE WHEN a.jobstatusid = 5 THEN a.JobStatusId END) AS cTotHis
FROM ActivityRecord a
GROUP BY a.EmployeeId

原理解释:

COUNT函数统计时会自动忽略NULL值,CASE WHEN语句不符合判断条件时默认返回NULL,因此刚好可以精准统计对应条件的记录总数。

特定数据库简化写法

如果是MySQL环境,可以用IF函数简化语法:

SELECT
    a.EmployeeId,
    SUM(IF(a.jobstatusid <> 5, 1, 0)) AS cTotOut,
    SUM(IF(a.jobstatusid = 5, 1, 0)) AS cTotHis
FROM ActivityRecord a
GROUP BY a.EmployeeId

扩展场景:展示所有员工(含无作业记录的员工)

如果需要输出所有员工的统计结果,哪怕该员工没有任何ActivityRecord记录,两个统计字段显示为0,可以左关联员工主表实现:

SELECT
    e.EmployeeId,
    COUNT(CASE WHEN a.jobstatusid <> 5 THEN a.JobStatusId END) AS cTotOut,
    COUNT(CASE WHEN a.jobstatusid = 5 THEN a.JobStatusId END) AS cTotHis
FROM Employee e
LEFT JOIN ActivityRecord a ON e.EmployeeId = a.EmployeeId
GROUP BY e.EmployeeId

内容的提问来源于stack exchange,提问作者Haminteu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:24:04