对于缺少一个更好的问题标题感到抱歉,如果有人知道我试图使其成为谷歌能力的SQL术语,我会改变它。
我有一张医院的下表。
subject_id | hadm_id | icd9_code
------------+---------+-----------
3 | 145834 | 5849
3 | 145834 | 4280
9 | 150750 | 5849
9 | 150750 | 4019
9 | 150750 | 4280
12 | 112213 | 4019
13 | 143045 | 4019
13 | 143045 | 25000
13 | 143045 | 41401
17 | 161087 | 2724
17 | 194023 | 2724
其中subject_id
对于患者是唯一的,hadm_id
是患者入院(住院)所特有的。每个icd9_code
代表一种疾病。因此,例如,3号病人在他们唯一的住院时间内被诊断出患有两种疾病(5849和4280)。
我给出了疾病代码列表,我需要返回已被诊断为至少所有这些疾病的患者名单。
请注意,同一患者可能会重复诊断(例如,患者17在两次不同的住院时间内被诊断患有疾病2724两次)。
答案 0 :(得分:2)
您可以使用Postgres的数组处理:
select subject_id
from the_table
group by subject_id
having array_agg(distinct icd9_code) @> array[4280, 5849];
array_agg()
收集每个subject_id的所有代码,运算符@>
检查该数组是否包含其他表达式中的所有元素。
答案 1 :(得分:1)
您可以使用给定的疾病列表筛选患者,并检查疾病的独特数量是否与每次住院时提供的清单计数相符:
select subject_id, hadm_id
from your_table
where icd9_code in (5849, 5850, 5851)
group by subject_id, hadm_id
having count(distinct icd9_code) = 3;