如何将两个统计不同条件案例数的SQL查询合并为单个查询
合并两个条件统计的SQL查询
你可以通过条件聚合的方式将两个查询合并为单条SQL,这样只需要扫描一次表,效率更高,逻辑也更清晰:
SELECT COUNT(DISTINCT CASE WHEN c.channel IS NOT NULL THEN c.caseid END) AS New_cases, COUNT(DISTINCT CASE WHEN c.channel IS NULL THEN c.caseid END) AS Old_cases FROM caseinfo c WHERE c.crtdate BETWEEN TO_DATE('2024/07/08') AND TO_DATE('2024/07/11');
逻辑说明:
- 两个统计共用同一个
WHERE条件(时间范围过滤),避免重复计算 CASE WHEN语句会根据channel的状态筛选对应的caseid:- 当
channel IS NOT NULL时,返回对应的caseid,否则返回NULL - 当
channel IS NULL时,返回对应的caseid,否则返回NULL
- 当
COUNT(DISTINCT ...)会自动忽略NULL值,因此只会统计符合条件的唯一caseid数量
注:部分数据库中UNIQUE和DISTINCT是同义词,这里用DISTINCT是更通用的写法。
内容的提问来源于stack exchange,提问作者H Varma
相关产品推荐
相关产品推荐

