SQL Avg()函数

广告位

在本教程中,我们将演示如何使用SQL AVG函数来获取集合的平均值。 1. SQL AVG函数简介 SQL A…

在本教程中,我们将演示如何使用SQL AVG函数来获取集合的平均值。

1. SQL AVG函数简介

SQL AVG函数是一个聚合函数,用于计算集合的平均值。 以下说明了SQL AVG函数的语法:

AVG([ALL|DISTINCT] expression)  

如果使用ALL关键字,AVG函数将获取计算中的所有值。 默认情况下,无论是否指定,AVG函数都使用ALL

如果明确指定DISTINCT关键字,AVG函数将仅在计算中采用唯一值。

例如,有一组数据集(1,2,3,3,4)并将AVG(ALL)应用于此集合,AVG函数将执行以下计算:

(1+2+3+3+4)/5 = 2.6  

但是,如果指定:AVG(DISTINCT)将按如下方式处理:

(1+2+3+4)/4 = 2.5  

2. SQL AVG函数示例

将使用示例数据库中的employees表来演示SQL AVG函数的工作原理。 以下图片说明了employees表的结构:

mysql> desc employees;  +---------------+--------------+------+-----+---------+----------------+  | Field         | Type         | Null | Key | Default | Extra          |  +---------------+--------------+------+-----+---------+----------------+  | employee_id   | int(11)      | NO   | PRI | NULL    | auto_increment |  | first_name    | varchar(20)  | YES  |     | NULL    |                |  | last_name     | varchar(25)  | NO   |     | NULL    |                |  | email         | varchar(100) | NO   |     | NULL    |                |  | phone_number  | varchar(20)  | YES  |     | NULL    |                |  | hire_date     | date         | NO   |     | NULL    |                |  | job_id        | int(11)      | NO   | MUL | NULL    |                |  | salary        | decimal(8,2) | NO   |     | NULL    |                |  | manager_id    | int(11)      | YES  | MUL | NULL    |                |  | department_id | int(11)      | YES  | MUL | NULL    |                |  +---------------+--------------+------+-----+---------+----------------+  10 rows in set  

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

SELECT       AVG(salary)  FROM      employees;  

执行上面示例代码,得到以下结果:

+-------------+  | AVG(salary) |  +-------------+  | 8060        |  +-------------+  1 row in set  

应用DISTINCT运算符来查看结果是否发生了变化:

SELECT       AVG(DISTINCT salary)  FROM      employees;  

执行上面示例代码,得到以下结果:

+----------------------+  | AVG(DISTINCT salary) |  +----------------------+  | 7845.454545          |  +----------------------+  1 row in set  

如上结果有改变,因为一些员工有相同的薪水。要将结果舍入为2位小数,请使用ROUND函数,如下所示:

SELECT       ROUND(AVG(DISTINCT salary), 2)  FROM      employees;  

要计算值子集的平均值,在SELECT语句中添加WHERE子句。 例如,要计算部门ID为5中员工的平均工资,使用以下查询:

SELECT      AVG(DISTINCT salary)  FROM      employees  WHERE      department_id = 5;  

以下语句返回工作岗位ID为6的员工的平均工资:

SELECT       AVG(salary)  FROM      employees  WHERE      job_id = 6;  

执行上面示例代码,得到以下结果:

+-------------+  | AVG(salary) |  +-------------+  | 7920        |  +-------------+  1 row in set  

带有GROUP BY子句的SQL AVG示例

要计算组的平均值,将AVG函数与GROUP BY子句一起使用。 例如,以下语句返回各部门的员工和员工的平均工资。

SELECT      department_id,      AVG(salary)  FROM      employees  GROUP BY      department_id;  

执行上面示例代码,得到以下结果:SQL Avg()函数

可以使用子句将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;  

执行上面示例代码,得到以下结果:

SQL Avg()函数

带有ORDER BY子句的SQL AVG示例

要对包含AVG结果的结果集进行排序,请使用AVG函数与ORDER BY子句,如下所示:

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()函数

SQL AVG与HAVING子句示例

要过滤分组,请AVG函数中使用HAVING子句。 例如,以下语句获取平均薪水小于5000的部门:

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

执行上面查询语句,得到以下结果:

+---------------+-----------------+-----------+  | department_id | department_name | avgsalary |  +---------------+-----------------+-----------+  |             1 | 管理            | 4400      |  |             3 | 采购            | 4150      |  +---------------+-----------------+-----------+  2 rows in set  

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;  

查询语句的工作原理。

  • 子查询返回每个部门的一组员工平均工资。
  • 外部查询返回部门的平均工资。

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

贺, 贺朝

关于作者: 贺朝

为您推荐