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

SQL查询增减service_date字段时COUNT统计结果不一致问题

SQL计数结果差异原因

两个查询返回不同计数的核心原因是DISTINCT关键字的去重规则:DISTINCT会对其后声明的所有字段的组合值做唯一性判断,组合值完全一致的记录才会被判定为重复并去除。

两个查询的去重逻辑差异

  • 第一个查询(返回结果235)的去重字段组合为patient_id, intrv_type, service_date
    只要三个字段的值不完全相同,就会被判定为独立记录保留。也就是说,同一个患者、同一种干预类型,如果服务发生在不同日期,会被算作多条独立记录,不会被去重。
    对应SQL:

    SELECT COUNT(*) AS member_count
    FROM (SELECT DISTINCT p.patient_id, 
                          intrv_type, 
                          service_date
          FROM intervention_service AS p 
          JOIN map_cohort_patient AS m ON p.patient_id = m.patient_id
          WHERE cohort_id = "202"
          AND p.intrv_type IN (4088)
          AND DATE(service_date) BETWEEN "2020-07-01" AND "2021-07-31" 
          )  AS x;
    
  • 第二个查询(返回结果232)的去重字段组合为patient_id, intrv_type
    只要患者ID和干预类型一致,不管对应多少条不同服务日期的记录,最终只会保留1条。
    对应SQL:

    SELECT COUNT(*) AS member_count 
    FROM ( SELECT DISTINCT p.patient_id, 
                           intrv_type
           FROM intervention_service AS p 
           JOIN map_cohort_patient AS m ON p.patient_id = m.patient_id
           WHERE cohort_id = "202"
           AND p.intrv_type IN (4088)
           AND DATE(service_date) BETWEEN "2020-07-01" AND "2021-07-31"
         ) AS x;
    

差值说明

两个结果差3条,说明在筛选的数据集里,存在3组「同一个患者、同一种4088类型干预,对应多个不同服务日期」的记录:

  • 这些记录在带service_date去重时会被全部保留,多计入3条
  • 不带service_date去重时,每组重复的同患者同类型记录只会留1条,因此总计数少3

可以根据实际统计目标选择对应写法:如果要统计接受过指定干预的去重患者人数,用第二个查询的逻辑;如果要统计不同日期发生的去重干预服务记录数,用第一个查询的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:24:22