时间:2021-07-01 10:21:17 帮助过:2人阅读
1、分组查询 GROUP BY, HAVING
2、基本函数
AVG(品均值) avg(column_name)求这一列的品均值
SUM(求和) sum(column_name)求这一列的总和
MAX(最大值) max(column_name)求这一列中的最大值
MIN(最小值) min(colunm_name)求这一列的最小值
COUNT(求总数) count(*)求总行数,count(column_name)求这一列的总行数,count(distinct column_name)去重求总行数
WM_CONCAT(行转列)
NVL(column_name,default) 略空函数 当column_name为空时返回default
3、group by
(1)查询部门品均工资:
select deptno,avg(sal) from emp group by deptno;
select avg(sal) from emp group by deptno;
在分组查询group by中,不包含在组函数中的列都要卸载group by子句后面,而包含在group by后的列不必包含在select列表中。
(2)按照部门不同职位来统计员工品均工资:
select deptno,job,avg(sal) from emp group by deptno,job order by deptno;
group by后的列按照先后顺序进行分组,即先安装第一列进行分组再按照第二列进行分组以此类推。
4、having子句
查询部门品均工资大于2000的部门:
select deptno,avg(sal) from emp group by deptno having avg(sal) > 2000;
where和having的区别:
1、在where子句中不能使用avg、sum等组函数,而having子句中可以使用。
2、where是先过滤后分组,having是先分组后过滤。
(从sql优化的角度来说:如果where和having都能使用时优先使用where)
5、group by增强
(1)select deptno,job,sum(sal) from emp group by deptno,job;
(2)select deptno,sum(sal) from emp group by deptno;
(3)select sum(sal) from emp;
(4)select deptno,job,sum(sal) from emp group by rollup(deptno,job);
(1)+(2)+(3)=(4)
Oracle学习3
标签: