SQL AVG

摘要:在本教程中,我们将向您展示如何使用 SQL AVG 函数获取一组数据的平均值。

SQL AVG 函数简介

SQL AVG 函数是一个计算一组数据的平均值的聚合函数。下面说明了 SQL AVG 函数的语法

AVG([ALL|DISTINCT] expression)Code language: SQL (Structured Query Language) (sql)

如果我们使用 ALL 关键字,AVG 函数会将所有值纳入计算。即使我们未指定 ALL,AVG 函数默认情况下也会使用 ALL。

如果我们显式指定 DISTINCT 关键字,AVG 函数将仅在计算中使用唯一值。

例如,我们有一组 (1,2,3,3,4),并对此组应用 AVG(ALL),AVG 函数将执行以下计算

(1+2+3+3+4)/5 = 2.6Code language: SQL (Structured Query Language) (sql)

然而,AVG(DISTINCT) 的处理过程如下

(1+2+3+4)/4 = 2.5Code language: SQL (Structured Query Language) (sql)

SQL AVG 函数示例

我们将使用示例数据库中的 employees 表来演示 SQL AVG 函数的工作原理。下图展示了 employees 表的结构

employees_table

若要计算所有员工的平均工资,请将 AVG 函数应用到 salary 列,如下所示

SELECT 
    AVG(salary)
FROM
    employees;Code language: SQL (Structured Query Language) (sql)

试试看

SQL AVG example

我们应用 DISTINCT 运算符来看看结果是否有变化

SELECT 
    AVG(DISTINCT salary)
FROM
    employees;Code language: SQL (Structured Query Language) (sql)

试试看

SQL AVG DISTINCT example

它发生了变化,因为一些员工的工资相同。

若要将结果四舍五入到小数点后两位,请使用 ROUND 函数,如下所示

SELECT 
    ROUND(AVG(DISTINCT salary), 2)
FROM
    employees;Code language: SQL (Structured Query Language) (sql)

试试看

SQL AVG with ROUND function example

若要计算一组值中的平均值,我们可以向 WHERE 子句 中添加一个 SELECT 语句。例如,若要计算部门 id 为 5 的员工的平均工资,我们使用以下查询

SELECT
	AVG(DISTINCT salary)
FROM
	employees
WHERE
	department_id = 5;Code language: SQL (Structured Query Language) (sql)

试试看

SQL AVG WHERE example

以下语句返回职务 id 为 6 的员工的平均工资

SELECT 
    AVG(salary)
FROM
    employees
WHERE
    job_id = 6;Code language: SQL (Structured Query Language) (sql)

试试看

SQL AVG WHERE job id

SQL AVG 与 GROUP BY 子句示例

若要计算组的平均值,我们使用 AVG 函数并带有 GROUP BY 子句。例如,以下语句返回各部门以及各个部门员工的平均工资。

SELECT
	department_id,
	AVG(salary)
FROM
	employees
GROUP BY
	department_id;Code language: SQL (Structured Query Language) (sql)

试试看

SQL AVG GROUP BY example

我们可以使用 inner join 子句将 employees 表和 departments 表联接起来,以获取部门名称数据

SELECT
	e.department_id,
	department_name,
	AVG(salary)
FROM
	employees e
INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
	e.department_id;Code language: SQL (Structured Query Language) (sql)

试试看

SQL AVG with INNER JOIN example

SQL AVG 与 ORDER BY 子句示例

若要对包括 AVG 结果的结果集进行排序,请在 ORDER BY 子句中使用 AVG 函数,如下所示

SELECT
	e.department_id,
	department_name,
	AVG(salary)
FROM
	employees e
INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
	e.department_id
ORDER BY
	AVG(salary) DESC;

试试看

SQL AVG with ORDER BY example

SQL AVG 与 HAVING 子句示例

若要过滤组,请在 HAVING 子句中使用 AVG 函数。例如,以下语句获取平均工资低于 5000 的部门

SQL AVG with HAVING clause example

SQL AVG 与子查询

我们可以在一个 SQL 语句中多次应用 AVG 函数,以此来计算一系列平均值的平均值。

例如,我们可以使用 AVG 函数计算每个部门中员工的平均工资,然后再应用 AVG 函数一次来计算各部门的平均工资。

以下查询描述了这个想法

SELECT
	AVG(employee_sal_avg)
FROM
	(
		SELECT
			AVG(salary) employee_sal_avg
		FROM
			employees
		GROUP BY
			department_id
	) t;Code language: SQL (Structured Query Language) (sql)

试试看

查询的工作原理。

  • 子查询返回一个为每个部门的员工平均工资的结果集。
  • 外部查询返回各个部门的平均工资。

在本教程中,您学习了如何使用 SQL AVG 函数计算一组数据的平均值。

本教程有帮助吗?