一、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;--错误,分组函数的嵌套太深