Sql 在使用案例时,如何计算满足特定条件的不同用户数
简言之,我正在处理医疗索赔数据,并试图计算出拥有两个或更多诊断代码和感兴趣的诊断代码的患者id总数 medical_索赔表如下所示:Sql 在使用案例时,如何计算满足特定条件的不同用户数,sql,sql-server,Sql,Sql Server,简言之,我正在处理医疗索赔数据,并试图计算出拥有两个或更多诊断代码和感兴趣的诊断代码的患者id总数 medical_索赔表如下所示: claim_id | patient_id | icd_code ---------+------------+--------- 01 | 111 | 150 02 | 111 | 200 03 | 222 | 150 04 | 222 | 1999
claim_id | patient_id | icd_code
---------+------------+---------
01 | 111 | 150
02 | 111 | 200
03 | 222 | 150
04 | 222 | 1999
05 | 333 | 150
06 | 333 | 200
07 | 333 | 205
08 | 333 | 210
我只想包括icd代码=150、200、205、210中任何一个大于等于2的不同患者id。结果输出仅包括患者id=111和333
我认为CASE-WHEN可能是最有效的方法,但不确定如何正确设置
我目前正试图这样构建它,但它只提供了不同icd_代码值的分布:
我只想包括icd代码=150、200、205、210中任何一个大于等于2的不同患者id
您可以使用聚合并具有:
我只想包括icd代码=150、200、205、210中任何一个大于等于2的不同患者id
您可以使用聚合并具有:
因此,如果一个给定的患者有两行ICD=150,你会包括或排除该患者?这实际上是一个很好的观点。如果包括/排除该情况,情况会是什么样子?因此,如果给定的患者有2行ICD=150,您将包括或排除该患者?这实际上是一个非常好的观点。如果该条件被包括/排除,会是什么样子?谢谢,这非常有用!如何计算>=2个icd代码值的不同患者id的总数?@David。您可以将此查询用作CTE或子查询,并使用COUNT*。很抱歉延迟-我尝试使用COUNT*运行子查询,但无法使其工作。你能告诉我你会怎么做吗?再次感谢你@大卫。我不明白你的评论。你是说这不起作用吗?当我尝试使用COUNT*作为子查询时,我一直得到一个错误。我尝试了几种不同的方法,但我认为我的设置不正确。谢谢,这很有帮助!如何计算>=2个icd代码值的不同患者id的总数?@David。您可以将此查询用作CTE或子查询,并使用COUNT*。很抱歉延迟-我尝试使用COUNT*运行子查询,但无法使其工作。你能告诉我你会怎么做吗?再次感谢你@大卫。我不明白你的评论。你是说这不起作用吗?当我尝试使用COUNT*作为子查询时,我一直得到一个错误。我尝试了几种不同的方法,但我认为我的设置不正确
SELECT
COUNT(CASE WHEN icd_code = '150' then 1 ELSE NULL END) as "150",
COUNT(CASE WHEN icd_code = '200' then 1 ELSE NULL END) as "200",
COUNT(CASE WHEN icd_code = '205' then 1 ELSE NULL END) as "205",
COUNT(CASE WHEN icd_code = '210' then 1 ELSE NULL END) as "210"
FROM medical_claims
select mc.patient_id
from medical_claims mc
where mc.icd_code in (150, 200, 205, 210)
group by mc.patient_id
having count(distinct mc.icd_code) >= 2;