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
相关产品推荐
相关产品推荐

