单个SQL查询统计双日期字段:总案例数与完成数异常排查
问题原因
你当前的SQL里,WHERE YEAR(tbl_lead.CompDate) = '2023'这个条件直接把结果集过滤成仅2023年完成的案例,所以COUNT(*)统计的就是这些已完成的案例数,自然和Completed列的数值完全一致,偏离了你要统计「2023年创建的总案例数 + 其中2023年完成的数量」的需求。
修正后的SQL
假设你的案例创建日期字段名为CreateDate(如果实际字段名不同,请替换成真实名称),修正后的查询语句如下:
SELECT COUNT(*) AS Cases, COUNT(IF(YEAR(tbl_lead.CompDate) = 2023, 1, NULL)) AS Completed, tbl_lead.LeadSource FROM tbl_lead WHERE YEAR(tbl_lead.CreateDate) = 2023 -- 筛选2023年创建的案例 GROUP BY tbl_lead.LeadSource
也可以用SUM+CASE的写法,逻辑完全一致,部分数据库对这种写法兼容性更好:
SELECT COUNT(*) AS Cases, SUM(CASE WHEN YEAR(tbl_lead.CompDate) = 2023 THEN 1 ELSE 0 END) AS Completed, tbl_lead.LeadSource FROM tbl_lead WHERE YEAR(tbl_lead.CreateDate) = 2023 GROUP BY tbl_lead.LeadSource
逻辑说明
WHERE YEAR(CreateDate) = 2023:限定统计范围为2023年创建的所有案例,这是总案例数的统计基础COUNT(*):统计每个LeadSource分组下,2023年创建的总案例数COUNT(IF(...))/SUM(CASE...):在总案例中,筛选出完成年份为2023的记录并统计数量,得到该分组下2023年完成的案例数
这样执行后就能得到你期望的输出结果:总案例数大于等于完成案例数,符合业务逻辑。
内容的提问来源于stack exchange,提问作者gary
相关产品推荐
相关产品推荐

