分组函数

本文详细介绍了 Oracle SQL 中的分组函数,包括 MIN、MAX、SUM、AVG 和 COUNT 函数的使用方法,以及 GROUP BY 和 HAVING 子句的应用技巧。通过多个示例展示了如何对数据进行有效的分组和汇总。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2
1

programming
1
Oracle SQL开发基础


2
2

programming
课程结构
内容

课时(H)

第一章 Oracle数据库基础

2.5

第二章 编写简单的查询语句

1.5

第三章 限制数据和对数据排序

2

第四章 单行函数

4

第五章 多表查询

4

第六章 分组函数

3

第七章 子查询

4

第八章 数据操作与事务控制

4

第九章 表和约束

4

第十章 其他数据库对象

4

 


2
3

programming
第六章 分组函数

目标:
本章旨在向学员介绍:
1) 分组函数的基本概念
2)分组函数的使用方法
时间: 3学时
教学方法:讲授ppt+上机练习
2
4

programming
本章要点
.分组函数的目的
.分组函数基本概念
.SUM、AVG、MIN、MAX、COUNT函数使用
.GROUP BY子句
.HAVING子句



2
5

programming
第六章 分组函数

分组函数:
6.1分组函数
6.2GROUP BY…HAVING子句的使用
2
6

programming
6.1分组函数

.分组函数是对表中一组记录进行操作,每组只返回一个结果。
即首先要对表记录进行分组,然后再进行操作汇总,每组返回
一个结果。分组时可能是整个表分为一组,也可能根据条件分
成多组。
.分组函数常用到以下的五个函数:
–MIN
–MAX
–SUM
–AVG
–COUNT

 



2
7

programming
6.1.1MIN函数和MAX函数 1/2
.MIN和MAX函数主要是返回每组的最小值和最大值。
–MIN([DISTINCT|ALL]表达式)
–MAX([DISTINCT|ALL]表达式)


.例6-1 员工最低工资及最高工资的示例。


SELECT MIN(salary), MAX(salary)
FROM employees;
2
8

programming
6.1.1MIN函数和MAX函数 2/2

.例6-2 员工姓最开始及最后的示例。
.例6-3 员工最低工资及最高工资的示例 。


SELECT MIN(last_name), MAX(last_name)

FROM employees;

SELECT MIN(salary), MAX(salary)
FROM employees;
2
9

programming
6.1.2SUM函数和AVG函数
.SUM和AVG函数分别返回总和及平均值。
–SUM([DISTINCT|ALL]n)
–AVG([DISTINCT|ALL]n)


.SUM和AVG函数都是只能够对数字类型的列或表达式操作。
.例6-4 公司员工总工资及平均工资的示例。


SELECT SUM(salary), AVG(salary)
FROM employees;
2
10

programming
6.1.3COUNT函数

.COUNT函数的主要功能是返回每组记录的条数。
–COUNT({*|[DISTINCT|ALL]表达式})


.例6-5 公司IT_PROG职位的员工人数的示例。
.例6-6 公司有部门员工人数的示例。


SELECT COUNT(*)

FROM employees

WHERE job_id='IT_PROG';

SELECT COUNT(department_id)
FROM employees;
2
11

programming
6.1.4组函数中DISTINCT
.DISTINCT会消除重复记录后再使用组函数
.例6-7 公司有员工部门数的示例。


SELECT COUNT(DISTINCT department_id)
FROM employees;
2
12

programming
6.1.5组函数中空值处理

.所有组函数对空值都是忽略的。
.例6-8 员工平均奖金的示例——忽略空值。
.例6-9 员工平均奖金的示例——空值转化。


SELECT AVG(commission_pct)

FROM employees;

SELECT AVG(NVL(commission_pct,0))
FROM employees;
2
13

programming
第六章 分组函数
分组函数:
6.1分组函数
6.2GROUP BY…HAVING子句的使用
2
14

programming
6.2.1GROUP BY子句 1/2
.组函数忽略空值,可以使用NVL,NVL2,COALESCE 函数处
理空值
.结果集隐式按升序排列,如果需要改变排序方式可以使用
Order by 子句(9i)


SELECT 列名, 组函数(列名)
FROM 表名
[WHERE 条件]
[GROUP BY 分组列]
[ORDER BY 列名];
2
15

programming
6.2.1GROUP BY子句 2/2

.例6-10 每个部门的总工资。
.例6-11 相同职位且经理相同的员工平均工资。


SELECT department_id, SUM(salary)
FROM employees
GROUP BY department_id ;
SELECT job_id,manager_id, AVG(salary)
FROM employees
GROUP BY job_id,manager_id
ORDER BY job_id;
2
16

programming
6.2.2GROUP BY子句注意问题 1/2
.在GROUP BY子句使用中,有两点需要注意:
–GROUP BY子句后的列可以不在SELECT语句中出现。
–SELECT子句中出现的非分组函数列必须在GROUP BY子句
中出现。


.例6-12 查询公司每个职位的平均工资,职位列不显示,同时结
果按照平均工资排序。


SELECT AVG(salary)
FROM employees
GROUP BY job_id
ORDER BY AVG(salary);
2
17

programming
6.2.2GROUP BY子句注意问题 2/2

.例6-13 分组汇总错误示例
.例6-14 分组汇总正确示例


 

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

programming
6.2.3HAVING子句 1/5
.例6-15 组函数筛选示例。
.原因是Oracle查询语句的执行顺序是:
–FROM WHERE GROUP BY SELECT ORDER BY

 


SELECT job_id, MAX(salary)
FROM employees
WHERE MAX(salary)>=9000
GROUP BY job_id;
2
19

programming
6.2.3HAVING子句 2/5

.语法结构如下:


SELECT 列名, 组函数
FROM 表名
[WHERE 条件]
[GROUP BY 分组列]
[HAVING 组函数表达式]
[ORDER BY 列名];
2
20

programming
6.2.3HAVING子句 3/5
.例6-16 组函数筛选示例。


SELECT job_id, MAX(salary)
FROM employees
GROUP BY job_id
HAVING MAX(salary)>=9000;
2
21

programming
6.2.3HAVING子句 4/5
.总结SELECT语句执行过程:
–通过FROM子句中找到需要查询的表;
–通过WHERE子句进行非分组函数筛选判断;
–通过GROUP BY子句完成分组操作;
–通过HAVING子句完成组函数筛选判断;
–通过SELECT子句选择显示的列或表达式及组函数;
–通过ORDER BY子句进行排序操作。

 



2
22

programming
6.2.3HAVING子句 5/5
.例6-17 组函数演示。


SELECT department_id, MAX(salary)
FROM employees
WHERE department_id BETWEEN 30 AND 90
GROUP BY department_id
HAVING MAX(salary)>=9000
ORDER BY MAX(salary);
2
23

programming
6.2.4组函数的嵌套
.组函数可以实现嵌套操作,嵌套级数是2级(select)。
.例6-18 组函数嵌套演示。


SELECT MAX(COUNT(employee_id))
FROM employees
GROUP BY department_id;
2
24

programming
本章小结
.MIN函数和MAX函数
.SUM函数和AVG函数
.COUNT函数
.组函数中DISTINCT消除重复行
.组函数中空值处理
.通过GROUP BY子句进行分组汇总
.GROUP BY子句使用需要注意的两个问题
.HAVING子句的使用
.组函数的嵌套



2
25

programming
练习
.1.查询部门平均工资在8000元以上的部门名称及平均工资。
.2.查询员工工作编号中不是以“SA_”开头并且平均工资在
8000元以上的工作编号及平均工资,并按平均工资


 降序排序。

.3.查询部门人数在4人以上的部门的部门名称及最低工


 资和最高工资。

.4.查询工作不为SA_REP,工资的和大于等于25000的工作编
号和每种工作工资的和。
.5.显示经理号码,这个经理所管理员工的最低工资,不包括经
理号为空的,不包括最低工资小于3000的,按最低工资由高到
低排序。



2
26

programming
谢谢



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值