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

如何通过SQL查询医生总预约时长并按降序展示?

解决方案:查询医生总预约时长并排序

没问题,我来帮你搞定这个SQL查询需求。结合你给出的三张表结构,我们需要关联表并计算每位医生的有效预约总时长,具体实现如下:

最终SQL查询语句

SELECT 
    d.id AS doctor_id,
    d.doctor_name,
    COALESCE(SUM(s.duration), 0) AS total_appointment_duration
FROM 
    doctors d
LEFT JOIN 
    appointments a ON d.id = a.doctor_id AND a.deleted_at IS NULL
LEFT JOIN 
    slots s ON a.slot_id = s.id
WHERE 
    d.status = 1  -- 如需包含所有状态的医生,可删除此行
GROUP BY 
    d.id, d.doctor_name
ORDER BY 
    total_appointment_duration DESC;

代码细节解释

  • 表关联逻辑:使用LEFT JOIN关联三张表,确保即使医生没有任何有效预约,也能出现在结果列表中;通过a.deleted_at IS NULL过滤掉已标记删除的预约记录。
  • 总时长计算:用SUM(s.duration)累加对应医生所有有效预约的时长,COALESCE函数用来处理无预约医生的空值,将其转为0,避免结果出现NULL。
  • 筛选与分组:WHERE d.status = 1用来只统计状态为启用的医生(如果不需要这个条件,直接删除该行即可);GROUP BY按医生的id和姓名分组,确保每个医生只返回一条汇总记录。
  • 排序规则:ORDER BY total_appointment_duration DESC让结果按总预约时长从高到低排列。

针对测试数据的执行结果

如果保留d.status = 1的条件,执行后会得到如下结果:

doctor_iddoctor_nametotal_appointment_duration
22Khaled2700
23Hasan1300

如果去掉d.status = 1,则会加入医生Rumi,总时长为500。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:06:52