sql AVG函数 SQL AVG函数简介 SQL AVG函数是一个聚合函数,用于计算集合的平均值。 以下说明了SQL AVG函数的语法: AVG([ALL|DISTINCT] expression)
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
将使用示例数据库中的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 employeesWHERE department_id = 5;
以下语句返回工作岗位ID为6的员工的平均工资:
SELECT AVG(salary)FROM employeesWHERE job_id = 6;
执行上面示例代码,得到以下结果:
+-------------+| AVG(salary) |+-------------+| 7920 |+-------------+1 row in set
带有GROUP BY子句的SQL AVG示例
要计算组的平均值,将AVG函数与GROUP BY子句一起使用。 例如,以下语句返回各部门的员工和员工的平均工资。
SELECT department_id, AVG(salary)FROM employeesGROUP BY department_id;
执行上面示例代码,得到以下结果:
可以使用inner join子句将employees表与departments表连接起来以获取部门名称数据:
SELECT e.department_id, department_name, AVG(salary)FROM employees eINNER JOIN departments d ON d.department_id = e.department_idGROUP BY e.department_id;
执行上面示例代码,得到以下结果:
要对包含AVG结果的结果集进行排序,请使用AVG函数与ORDER BY子句,如下所示:
SELECT e.department_id, department_name, AVG(salary)FROM employees eINNER JOIN departments d ON d.department_id = e.department_idGROUP BY e.department_idORDER BY AVG(salary) DESC;
执行上面查询语句,得到以下结果:
要过滤分组,请AVG函数中使用HAVING子句。 例如,以下语句获取平均薪水小于5000的部门:
SELECT e.department_id, department_name, AVG(salary) AS avgsalaryFROM employees eINNER JOIN departments d ON d.department_id = e.department_idGROUP BY e.department_idHAVING avgsalary<5000ORDER BY AVG(salary) DESC;
执行上面查询语句,得到以下结果:
+---------------+-----------------+-----------+| department_id | department_name | avgsalary |+---------------+-----------------+-----------+| 1 | 管理 | 4400 || 3 | 采购 | 4150 |+---------------+-----------------+-----------+2 rows in set
可以在单个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函数计算集合的平均值。
来源地址:https://blog.csdn.net/QYgujingjing/article/details/129965911
--结束END--
本文标题: SQL AVG函数
本文链接: https://lsjlt.com/news/417835.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0