09_分组函数
一、分组函数(聚合函数)
分组函数作用于一组数据,并对一组数据返回一个值。
--查询所有雇员中的最高工资
select max(salary) from employees;
二、组函数类型
AVG
COUNT
MAX
MIN
STDDEV 返回expr的样本标准偏差。它可用作聚集和分析函数
SUM
三、组函数语法
SELECT [column,] group_function(column), ...
FROM table
[WHERE condition]
[GROUP BY column]
[ORDER BY column];
1.AVG(平均值)和 SUM (合计)函数
可以对数值型数据使用AVG 和 SUM 函数
--计算所有雇员的平均工资 工资总和 最高工资 最低工资
select avg(salary),sum(salary),max(salary),min(salary)from employees;
2.MIN(最小值)和 MAX(最大值)函数
可以对任意数据类型的数据使用 MIN 和 MAX 函数。
--查询入职时间最早和最晚的雇员信息
select * from employees where hire_date = (select min(hire_date) from employees);
3.COUNT(计数)函数
COUNT(*) 返回表中记录总数,适用于任意数据类型。
SELECT COUNT(*)
FROM employees
WHERE department_id = 50;
COUNT(expr) 返回expr不为空的记录总数。
空值不统计
SELECT COUNT(commission_pct)
FROM employees
WHERE department_id = 50;
4.组函数与空值
组函数忽略空值。
--查询所有雇员的平均奖金率
select avg(commission_pct) from employees;
--查询所有雇员的平均奖金率
select avg(commission_pct) from employees;--avg只针对有奖金率的员工进行均值的计算
select avg(nvl(commission_pct,0)) from employees;--avg是针对所有员工
5.在组函数中使用NVL函数
NVL函数使分组函数无法忽略空值。
SELECT AVG(NVL(commission_pct, 0))
FROM employees;
6.DISTINCT 关键字
COUNT(DISTINCT expr)返回expr非空且不重复的记录总数
--在雇员表中统计部门的数量
select count(distinct department_id) from employees;
四、分组数据
1.分组数据: GROUP BY 子句语法
可以使用GROUP BY子句将表中的数据分成若干组
--查询每个部门的雇员的平均工资
select department_id, avg(salary)from employees
group by department_id;
明确:WHERE一定放在FROM后面
在SELECT 列表中所有未包含在组函数中的列都应该包含在 GROUP BY 子句中。
--查询每个部门的雇员的平均工资 在select之后出现的字段 如果没有在分组函数中 则必须出现在gourp by 之后 不能单独出现
select department_id, job_id, avg(salary)from employees
group by department_id,job_id;
包含在 GROUP BY 子句中的列不必包含在SELECT 列表中
select department_id ,avg(salary)from employees
group by department_id,job_id;
2.非法使用组函数
所有包含于SELECT 列表中,而未包含于组函数中的列都必须包含于 GROUP BY 子句中。
GROUP BY 子句中缺少列
- 不能在 WHERE 子句中使用组函数。
- 可以在 HAVING 子句中使用组函数。
3.过滤分组: HAVING 子句
使用 HAVING 过滤分组:
- 行已经被分组。
- 使用了组函数。
- 满足HAVING 子句中条件的分组将被显示。
--查询所有部门最工资大于10000的部门信息
select department_id,max(salary)
from employees
group by department_id
having max(salary) > 10000;
4.嵌套组函数
显示各部门平均工资的最大值
--显示各部门平均工资的最大值
select max(avg(salary))
from employees
group by department_id;
当存在组函数的嵌套时 在select中 除了组函数使用的列 不允许出现其他列 即使分组的列也不能出现在select中
总 结
通过本章学习,您已经学会:
•使用组函数:avg(),sum(),max(),min(),count()
•在查询中使用 GROUP BY 子句。
•在查询中使用 HAVING 子句。
SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];