SQL 计算平均值,你想计算某一列的平均值,可能针对表中的全部记录,也可能只针对部分记录。例如,你希望知道全部员工的平均工资,同时也想知道每个部门的平均工资。
SQL 计算平均值 问题描述
你想计算某一列的平均值,可能针对表中的全部记录,也可能只针对部分记录。例如,你希望知道全部员工的平均工资,同时也想知道每个部门的平均工资。
SQL 计算平均值 解决方案
为了计算所有员工的平均工资,只需要针对 SAL
列调用 AVG
函数即可。由于没有使用 WHERE
子句,因此 AVG
函数会计算所有非 Null
值的平均值。
为了计算每个部门的平均工资,需要使用 GROUP BY
子句来对部门进行分组。
SQL 计算平均值 扩展知识
针对整个表计算平均值时,只要对感兴趣的列执行 AVG
函数即可,而且不需要使用 GROUP BY
子句。请记住,AVG
函数会忽略 Null
。下面的例子演示了 Null
被忽略之后的结果。
COALESCE
函数会返回其参数列表中的第一个非 Null
值。如果是 Null
,则 SAL
的值为 0
,这样平均值的计算结果也会发生变化。当使用聚合函数的时候,一定要先想一下如何处理 Null
。
本解决方案的第二部分使用 GROUP BY
(第 3 行)依据部门从属关系把员工数据分为若干组。GROUP BY
使得像 AVG
这样的聚合函数自动为每一个分组返回一个结果。本例中,AVG
函数将针对按照部门分组后的每一组员工数据进行计算。
顺便说一下,不一定非要把 GROUP BY
列放到 SELECT
列表里。来看下面这个例子。
尽管 DEPTNO
没有被放在 SELECT
子句里,但是我们仍然按照该列分组。把用于分组的列放入 SELECT
子句通常有助于提高可读性,但这并不是必需的。反之则不然,不能把 GROUP BY
子句里没有的列放入 SELECT
列表。