Sql简介 专题
专题目录
您的位置:database > Sql简介专题 > SQL Avg()函数
SQL Avg()函数
作者:--    发布时间:2019-11-20

在本教程中,我们将演示如何使用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;

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

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

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

带有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与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函数计算集合的平均值。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册