如何运用AVG函数在SQL数据库中精准查询特定数据的平均数值?
- 内容介绍
- 文章标签
- 相关推荐
本文共计697个文字,预计阅读时间需要3分钟。
AVG函数不能直接处理非数值列、NULL值不参与计算、多列平均需手动展开——这并非语法问题,而是语义限制。
AVG 只能作用于单列或单个数值表达式
很多人写 SELECT AVG(salary, bonus) FROM employees,这会报错:SQL 不支持对多个列直接调用 AVG。它只接受一个标量表达式作为参数。
- 正确做法是把多列合并成一个算术表达式,例如
AVG(bonus + salary)或AVG((salary + bonus + allowance) / 3.0) - 如果想分别看每列平均值,得显式写出多个
AVG():SELECT AVG(salary), AVG(bonus), AVG(allowance) FROM employees - 注意除法中用
3.0而非3,避免整数除法截断(尤其在 SQL Server、PostgreSQL 中)
NULL 值被自动忽略,但 0 和空字符串不是 NULL
执行 SELECT AVG(score) FROM exam_results 时,哪怕有 10 条记录里 3 条是 NULL,AVG 仍按剩余 7 个非空值计算。但如果你的“未参加考试”存的是 0 而非 NULL,这个 0 就会被计入平均——结果明显偏低。
本文共计697个文字,预计阅读时间需要3分钟。
AVG函数不能直接处理非数值列、NULL值不参与计算、多列平均需手动展开——这并非语法问题,而是语义限制。
AVG 只能作用于单列或单个数值表达式
很多人写 SELECT AVG(salary, bonus) FROM employees,这会报错:SQL 不支持对多个列直接调用 AVG。它只接受一个标量表达式作为参数。
- 正确做法是把多列合并成一个算术表达式,例如
AVG(bonus + salary)或AVG((salary + bonus + allowance) / 3.0) - 如果想分别看每列平均值,得显式写出多个
AVG():SELECT AVG(salary), AVG(bonus), AVG(allowance) FROM employees - 注意除法中用
3.0而非3,避免整数除法截断(尤其在 SQL Server、PostgreSQL 中)
NULL 值被自动忽略,但 0 和空字符串不是 NULL
执行 SELECT AVG(score) FROM exam_results 时,哪怕有 10 条记录里 3 条是 NULL,AVG 仍按剩余 7 个非空值计算。但如果你的“未参加考试”存的是 0 而非 NULL,这个 0 就会被计入平均——结果明显偏低。

