如何在含GROUP BY和ORDER BY的SQL查询中计算平均值?
嘿,我来帮你理清这个问题~你的原查询是按location_id分组统计每个地点的问题数量,现在要加入平均值计算,主要分两种常见场景,我分别给你说明:
场景1:计算每个分组内某字段的平均值
如果你想统计每个location_id下,issues表中某个数值字段(比如priority优先级、resolve_days解决时长这类)的平均值,直接在SELECT语句里添加AVG(字段名)即可,GROUP BY依然按location_id分组,ORDER BY可以根据需求调整:
SELECT location_id, COUNT(id) AS tcount, AVG(your_numeric_column) AS avg_field_value -- 替换成你实际要计算平均值的字段 FROM issues GROUP BY location_id ORDER BY tcount DESC;
⚠️ 小提示:AVG()函数仅对数值型字段有效,字符串、日期这类类型不能直接用它计算哦。
场景2:计算所有分组统计结果的平均值
如果你的需求是先得到每个地点的问题数量(也就是原查询的tcount结果),再计算这些数量的整体平均值,可以用两种方式实现:
方法1:子查询单独获取整体平均值
先通过子查询生成每个分组的tcount列表,再在外层计算平均值:
-- 仅输出所有分组tcount的平均值 SELECT AVG(tcount) AS overall_avg_tcount FROM ( SELECT COUNT(id) AS tcount FROM issues GROUP BY location_id ) AS grouped_counts;
方法2:窗口函数同时展示分组数据和整体平均值
如果想在结果里同时看到每个分组的tcount和所有分组的平均tcount,用窗口函数AVG() OVER()会更高效直观:
SELECT location_id, COUNT(id) AS tcount, AVG(COUNT(id)) OVER() AS overall_avg_tcount -- 窗口函数计算所有分组的平均值 FROM issues GROUP BY location_id ORDER BY tcount DESC;
这种写法会在每一行结果里都显示整体的平均问题数,方便你对比单个地点和整体水平的差异。
内容的提问来源于stack exchange,提问作者shekwo
相关产品推荐
相关产品推荐

