求SQL查询语句:统计同时患有depression和anxiety的患者数
统计同时患有抑郁和焦虑的患者总数的SQL方案
这里提供几种实用的SQL写法,可根据你的数据库类型和表数据特点选择:
方法1:GROUP BY + HAVING筛选(通用型)
这是最常用的方案,适用于所有主流数据库:
SELECT COUNT(DISTINCT patient_id) AS total_patients FROM your_table_name WHERE diagnosis_description IN ('depression', 'anxiety') GROUP BY patient_id HAVING COUNT(DISTINCT diagnosis_description) = 2;
- 逻辑:先筛选出诊断为抑郁或焦虑的记录,按患者ID分组后,只保留同时拥有两种诊断的分组,最后统计这些患者的数量。
- 优化点:如果你的表中同一患者不会重复出现同一种诊断,可以把
COUNT(DISTINCT diagnosis_description)改成COUNT(*) = 2,提升查询效率。
方法2:自连接查询
通过表自关联匹配同时存在两种诊断的患者:
SELECT COUNT(DISTINCT a.patient_id) AS total_patients FROM your_table_name a JOIN your_table_name b ON a.patient_id = b.patient_id WHERE a.diagnosis_description = 'depression' AND b.diagnosis_description = 'anxiety';
- 逻辑:将表与自身连接,匹配出同一个患者同时有抑郁和焦虑诊断的记录,最后去重统计患者总数。
方法3:使用INTERSECT(适用于PostgreSQL、SQL Server等)
利用交集操作直接获取同时满足两种诊断的患者:
SELECT COUNT(*) AS total_patients FROM ( SELECT patient_id FROM your_table_name WHERE diagnosis_description = 'depression' INTERSECT SELECT patient_id FROM your_table_name WHERE diagnosis_description = 'anxiety' ) AS combined_patients;
- 逻辑:分别查询出有抑郁诊断、有焦虑诊断的患者列表,取两者的交集,最后统计交集中的患者数量。
注意事项
请将上述SQL中的your_table_name替换为你实际使用的表名。用你提供的示例数据测试时,三种方法都会返回结果1,符合预期输出。
内容的提问来源于stack exchange,提问作者user23356933
相关产品推荐
相关产品推荐

