SQL新手求助:如何计算查询结果平均值及Count_Totals平均行
两种解决思路(计算Count_Totals的平均值)
1. 在原查询结果末尾追加平均值行
如果你想把平均值和原查询结果放在同一张结果表里,可以用UNION ALL将原查询和平均值计算语句合并,注意两部分的列数、列类型要匹配。
举个实际例子,假设你的原查询是统计各部门的员工总数:
SELECT department AS 部门, COUNT(*) AS Count_Totals FROM employees GROUP BY department;
要追加平均值行,把原查询作为子查询,再和聚合平均值的语句合并:
-- 原查询结果 SELECT department AS 部门, COUNT(*) AS Count_Totals FROM employees GROUP BY department UNION ALL -- 平均值行 SELECT '平均值' AS 部门, AVG(sub.Count_Totals) AS Count_Totals FROM ( -- 复制原查询的核心统计逻辑 SELECT COUNT(*) AS Count_Totals FROM employees GROUP BY department ) AS sub;
2. 单独计算Count_Totals的平均值
如果不需要和原结果合并,直接单独计算平均值更简单,将原查询作为子查询,外层用AVG()聚合即可:
SELECT AVG(sub.Count_Totals) AS Avg_Count_Totals FROM ( -- 原查询内容 SELECT COUNT(*) AS Count_Totals FROM employees GROUP BY department ) AS sub;
关键注意点
- 子查询必须指定别名(比如示例里的
sub),否则SQL会报错。 - 不管你的
Count_Totals是通过COUNT()还是其他逻辑计算的,只要把原查询中对应字段放到子查询里,就能套用上面的写法。
内容的提问来源于stack exchange,提问作者Kevin Bowerman
相关产品推荐
相关产品推荐

