(数据库)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 子句中缺少列

  1. 不能在 WHERE 子句中使用组函数
  2. 可以在 HAVING 子句中使用组函数

3.过滤分组: HAVING 子句

使用 HAVING 过滤分组:

  1. 行已经被分组。
  2. 使用了组函数。
  3. 满足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];

随堂练习:

添加链接描述

发布了67 篇原创文章 · 获赞 6 · 访问量 1932

猜你喜欢

转载自blog.csdn.net/weixin_45801537/article/details/104263332