Oracle笔记06——Oracle分组函数

一、MIN函数和MAX函数

基本语法:
求最小值:MIN([DISTINCT | ALL] 列名 | 表达式)
求最大值:MAX([DISTINCT | ALL] 列名 | 表达式)
注意:MIN和MAX可以用于任何数据类型

 

二、SUM函数和AVG函数

基本语法:
求和:SUM([DISTINCT | ALL] 列名 | 表达式)
求平均值:AVG([DISTINCT | ALL] 列名 | 表达式)
注意:SUM和AVG函数都是只能够对数值类型的列或表达式操作

 

三、COUNT函数

作用:返回满足条件的每组记录条数
基本语法:
COUNT([DISTINCT | ALL] * | 列名 | 表达式)
注意:除了COUNT(*)之外,其它所有分组函数都会忽略列中的空值,然后进行计算

 

四、GROUP BY子句

作用:将表中满足WHERE条件的记录按照指定的列划分成若干个小组
基本语法:
GROUP BY [列名 | 表达式]
注意:
①SELECT子句列表中,只允许放分组函数,以及出现在GROUP BY后面的列
②并不是GROUP BY后面的列一定要写在SELECT列表中

 

五、HAVING子句

作用:排除组结果
基本语法:
HAVING 条件

 

六、SELECT语句执行过程

1.通过FROM子句中找到需要查询的表;
2.通过WHERE子句进行非分组函数筛选判断;
3.通过GROUP BY子句完成分组操作;
4.通过HAVING子句完成组函数筛选判断;
5.通过SELECT子句选择显示的列或表达式及组函数;
6.通过ORDER BY子句进行排序操作。

 

七、组函数的嵌套

分组函数最多允许嵌套两层,单行函数可以无限嵌套

 

七、练习

--MIN()和MAX()
--1.查询最早和最晚的入职日期
SELECT MIN(hiredate), MAX(hiredate) FROM emp;--用于日期类型
--2.查询薪资最低与薪资最高的两个员工
SELECT MIN(sal), MAX(sal) FROM emp;--用于数值类型
--3.查询最小与最大的姓名
SELECT MIN(ename), MAX(ename) FROM emp;

--SUM()和AVG()
--1.查询所有员工的平均工资和工资总和
SELECT AVG(sal), SUM(sal) FROM emp;

--COUNT()
--1.查询部门30有多少员工
SELECT COUNT(*) FROM emp WHERE deptno = 30;--效率低
SELECT COUNT(deptno) FROM emp WHERE deptno = 30;--效率高
--2.查询部门30有多少员工领到了奖金
SELECT COUNT(comm) FROM emp WHERE deptno = 30;
--3.查询所有员工的平均奖金
SELECT COUNT(comm), AVG(comm) 平均奖金 FROM emp;--不包括没有奖金的人数
SELECT COUNT(NVL(comm,0)), AVG(NVL(comm,0)) 平均奖金 FROM emp;--包括没有奖金的人数

--GROUP BY()
--1.查询每个部门的编号,平均工资
SELECT deptno,AVG(sal) FROM emp GROUP BY deptno;--按单列分组
--2.查询每个部门每个岗位的工资总和
SELECT deptno,job,SUM(sal) FROM emp GROUP BY deptno,job;--按多列分组

--HAVING
--1.查询每个部门最高工资大于2900的部门编号,最高工资
SELECT deptno,MAX(sal) FROM emp GROUP BY deptno HAVING MAX(sal) > 2900;

--2.SELECT语句的执行过程
SELECT deptno, job, AVG(sal)                           --5
  FROM emp                                             --1
 WHERE job IN ('SALESMAN', 'MANAGER', 'CLERK')         --2
 GROUP BY deptno, job                                  --3
HAVING AVG(sal) > 1000                                 --4
 ORDER BY 3 DESC;                                      --6

--组函数的嵌套
SELECT deptno,COUNT(1) FROM emp GROUP BY deptno;--各个部门的人数
SELECT AVG(COUNT(1)) FROM emp GROUP BY deptno;--各个部门的平均人数
SELECT MAX(AVG(COUNT(1))) FROM emp GROUP BY deptno;--错误,分组函数的嵌套太深

 

上一篇:Oracle多表关联


下一篇:「SequoiaDB巨杉数据库」forceStepUp()