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

SQL技术咨询:如何查询各Provider的每位患者平均Session数

问题排查与正确SQL写法

原SQL的问题

  • 语法错误:SQL不允许在同一级SELECT中嵌套使用聚合函数,avg(count(session_id)) 这种写法违反规则——count()作为聚合函数,不能直接作为avg()的参数在同一查询层级中使用。
  • 逻辑冗余:需求是计算每个医生下每位病人的平均就诊次数,直接用总就诊次数除以该医生的唯一病人数即可,不需要嵌套聚合函数。

正确SQL写法

方法一:分步计算(贴合需求逻辑)

先统计每个医生每个病人的就诊次数,再对这些次数求平均值:

SELECT 
    p.name,
    AVG(patient_session_count) AS avg_sessions
FROM providers p
JOIN (
    -- 子查询:统计每个医生每个病人的就诊次数
    SELECT 
        provider_id,
        patient_id,
        COUNT(session_id) AS patient_session_count
    FROM sessions
    GROUP BY provider_id, patient_id
) s ON p.id = s.provider_id
GROUP BY p.name

方法二:简洁等价写法

利用数学等价性,总就诊次数除以该医生的唯一病人数,结果与方法一完全一致:

SELECT 
    p.name,
    COUNT(s.session_id) / COUNT(DISTINCT s.patient_id) AS avg_sessions
FROM providers p
JOIN sessions s ON p.id = s.provider_id
GROUP BY p.name

扩展:保留无就诊记录的医生

如果需要展示所有医生(包括没有任何就诊记录的),可以使用LEFT JOIN并处理空值,避免除以0的错误:

SELECT 
    p.name,
    COALESCE(COUNT(s.session_id) / NULLIF(COUNT(DISTINCT s.patient_id), 0), 0) AS avg_sessions
FROM providers p
LEFT JOIN sessions s ON p.id = s.provider_id
GROUP BY p.name

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:45:38