首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择列具有列表中所有值的所有行。

选择列具有列表中所有值的所有行。
EN

Stack Overflow用户
提问于 2018-04-18 13:44:21
回答 2查看 937关注 0票数 0

很抱歉,没有一个更好的标题,如果有人知道我试图做的SQL行话,使它可以谷歌,我会改变它。

我有一家医院的下表。

代码语言:javascript
运行
复制
 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次疾病)。

EN

回答 2

Stack Overflow用户

发布于 2018-04-18 13:49:02

为此,可以使用Postgres的数组处理:

代码语言:javascript
运行
复制
select subject_id
from the_table
group by subject_id
having array_agg(distinct icd9_code) @> array[4280, 5849];

array_agg()收集每个subject_id的所有代码,运算符@>检查该数组是否包含来自其他表达式的所有元素。

票数 2
EN

Stack Overflow用户

发布于 2018-04-18 13:49:18

您可以使用给定的疾病列表对患者进行筛选,并检查疾病的不同计数是否与所提供的每次停留的列表计数相匹配:

代码语言:javascript
运行
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49901340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档