很抱歉没有更好的问题标题,如果有人知道我正在尝试做的事情的 SQL 行话,我会更改它以使其可用于 Google。
我有一张来自医院的下表。
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 两次)。
最佳答案
您可以为此使用 Postgres 的数组处理:
select subject_id
from the_table
group by subject_id
having array_agg(distinct icd9_code) @> array[4280, 5849];
array_agg()
收集每个 subject_id 的所有代码,运算符 @>
检查该数组是否包含来自另一个表达式的所有元素。
关于sql - 选择列中包含列表中所有值的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49901340/