You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL查询所有就诊患者年龄均低于30岁的医生姓名?

表结构说明
  • Doctor表:存储医生基础信息,包含字段 ID、name、phone
  • Patient表:存储患者基础信息,包含字段 ID、name、phone、age、sex
  • DoctorPatient表:多对多关联表,存储医生和患者的绑定关系,包含字段 DoctorID、PatientID
需求

查询名下所有患者年龄均小于30岁的医生姓名

实现SQL

写法1:分组聚合实现(逻辑直观易读)

通过按医生分组后校验患者最大年龄的方式筛选符合条件的医生:

SELECT d.name
FROM Doctor d
INNER JOIN DoctorPatient dp ON d.ID = dp.DoctorID
INNER JOIN Patient p ON dp.PatientID = p.ID
GROUP BY d.ID, d.name
HAVING MAX(p.age) < 30;

边界补充:如果需要把没有任何绑定患者的医生也包含在结果中,将INNER JOIN改为LEFT JOIN,并修改HAVING条件为 HAVING MAX(p.age) < 30 OR MAX(p.age) IS NULL 即可。

写法2:NOT EXISTS实现(大数据量下性能更优)

通过反向排除「存在年龄≥30岁患者的医生」得到结果:

SELECT DISTINCT d.name
FROM Doctor d
WHERE NOT EXISTS (
    SELECT 1
    FROM DoctorPatient dp
    INNER JOIN Patient p ON dp.PatientID = p.ID
    WHERE dp.DoctorID = d.ID
      AND p.age >= 30
);

内容的提问来源于stack exchange,提问作者Melenko Oleksandr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:54:05