首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何才能找出我的SQL Server数据库中有多少用户有两种医疗状况?

如何才能找出我的SQL Server数据库中有多少用户有两种医疗状况?
EN

Stack Overflow用户
提问于 2017-08-30 17:42:49
回答 4查看 137关注 0票数 0

我的SQL Server数据库中有一个表,其中存储了UserID、医疗条件名称和该医疗条件的诊断日期。

代码语言:javascript
复制
 UserID          ConditionName        DiagnosisDate
 9038            Hypertension         1971-07-14
 9039            Diabetes             1964-05-13

每个用户可能有多种健康状况(即,具有UserID 9038的用户可能有头痛、糖尿病和高血压)。

我想写一个查询,找出用户的共病。

例如,我想知道有多少高血压患者同时患有糖尿病。

EN

回答 4

Stack Overflow用户

发布于 2017-08-30 17:50:08

这将显示具有多个医疗条件的所有用户:

代码语言:javascript
复制
SELECT UserID, COUNT(DISTINCT ConditionName) AS medical_conditions
FROM <TABLE>
GROUP BY UserID
HAVING medical_conditions >= 2;

如果你想搜索特定的医疗条件,你可以使用IN和子查询:

代码语言:javascript
复制
SELECT UserID
FROM <TABLE>
WHERE ConditionName = 'Diabetes'
AND UserID IN (SELECT UserID FROM <TABLE> WHERE ConditionName = 'Hypertension');
票数 3
EN

Stack Overflow用户

发布于 2017-08-30 17:46:55

您可以使用subelect来执行此操作:

代码语言:javascript
复制
SELECT COUNT(*) FROM YourTable
    WHERE ConditionName = 'Hypertension'
        AND UserID IN
            (
                SELECT UserID FROM YourTable
                    WHERE ConditionName = 'Diabetes'
            );

这将为您提供高血压所有记录的计数。如果一个UserID可能多次出现相同的情况,则必须用COUNT(DISTINCT UserID)替换COUNT(*)

票数 2
EN

Stack Overflow用户

发布于 2017-08-30 17:46:01

有很多解决方案可以解决这个问题。使用IN

代码语言:javascript
复制
SELECT count(*) 
FROM tab 
WHERE userid IN (SELECT t2.userid FROM tab t2 WHERE t2.ConditionName = 'Hypertension') and 
      userid IN (SELECT t2.userid FROM tab t2 WHERE t2.ConditionName = 'Diabetes')

使用EXISTS

代码语言:javascript
复制
SELECT count(*) 
FROM tab t1
WHERE EXISTS(SELECT 1 FROM tab t2 WHERE t2.ConditionName = 'Hypertension' AND t2.userid = t1.userid) and 
      EXISTS(SELECT 1 FROM tab t2 WHERE t2.ConditionName = 'Diabetes' AND t2.userid = t1.userid)

使用INTERSECT

代码语言:javascript
复制
SELECT count(*)
FROM
(
    SELECT userid FROM tab WHERE ConditionName = 'Hypertension'
    INTERSECT
    SELECT userid FROM tab WHERE ConditionName = 'Diabetes'
) x

使用GROUP BY

代码语言:javascript
复制
SELECT userid
FROM tab
WHERE ConditionName = 'Diabetes' or ConditionName = 'Hypertension'
GROUP BY userid 
HAVING count(distinct ConditionName) = 2;

dbfiddle demo

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45957010

复制
相关文章

相似问题

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