如何单次执行SQL同时获取多条件及仅t1.IsActive=1过滤的行数?
单次查询同时返回两个统计结果的SQL写法
你可以通过条件聚合函数在单次查询中同时计算两个统计值,无需重复执行多表连接操作。具体写法如下:
SELECT -- 原查询的总行数(满足所有过滤条件) COUNT(CASE WHEN t1.EmpId LIKE '%Emp%' AND t2.Company = 'A' AND t3.St <> 'NY' THEN 1 END) AS original_total, -- 仅t1.IsActive = 1时的总行数 COUNT(*) AS active_only_total FROM Table1 t1 INNER JOIN Table2 t2 ON t1.empId = t2.empId INNER JOIN Table3 t3 ON t2.empId = t3.empId INNER JOIN Table4 t4 ON t3.empId = t4.empId INNER JOIN Table5 t5 ON t4.empId = t5.empId INNER JOIN Table6 t6 ON t5.empId = t6.empId INNER JOIN Table7 t7 ON t6.empId = t7.empId WHERE t1.IsActive = 1;
逻辑说明
WHERE t1.IsActive = 1限定所有统计行都满足这个基础条件,保证active_only_total的准确性。original_total通过CASE语句判断是否满足原查询的其余过滤条件,只有符合条件的行才会被计数,结果和原查询的COUNT(*)完全一致。- 该写法仅执行一次多表连接,比分开执行两次查询更高效。
内容的提问来源于stack exchange,提问作者fdkgfosfskjdlsjdlkfsf
相关产品推荐
相关产品推荐

