Chapter V: Oracle data packet function and packet

Introduced before the SQL function contains the function when the line and multi-line functions. Here multi-line group function is a function of acting on a set of data, and returns a value for a set of data. Grouping common functions are: avg, sum, min, max, count, vm_concat. In addition, in a relational database, data packets can be obtained using the summary table data. Data packets by grouping functions, group by clause and the like having a common implementation.


A, Oracle's group function

--求平均值avg
select avg(sal) from emp;

--求和sum
select sum(sal) from emp;

--求最大值max
select max(sal) from emp;

--求最小值min
select min(sal) from emp;

--计数函数count
select count(*) from emp;
select count(empno) from emp;

--统计一下部门的个数
select count(deptno) from emp;
--在分组函数中通过distinct关键字来去除重复的记录
select count(distinct deptno) from emp;

--行转列wm_concat
select wm_concat(ename) from emp;

--求员工的平均工资
select sum(sal)/count(*) 方法一, sum(sal)/count(sal) 方法二, avg(sal) 方法三 from emp;
--求员工的平均补助
select sum(comm)/count(*) 方法一, sum(comm)/count(comm) 方法二, avg(comm) 方法三 from emp;

select count(*),count(nvl(comm,0)) from emp;

select comm from emp;
--不忽略空值
select avg(nvl(comm,0)) from emp;
--忽略空值
select avg(comm) from emp;


Two, Oracle data packet -group by

--求出每个部门的平均工资,要求显示:部门号,部门的平均工资
select deptno,avg(sal) from emp group by deptno;
--注意:在select列表中所有未包含在组函数中的列都应该包含在group by子句中

--多列分组
--按不同的部门,不同的职位,计算员工的平均工资
select deptno,job,avg(sal) from emp group by deptno,job order by deptno;

--求出每个部门的平均工资,要求显示:每个部门的平均工资。
select avg(sal)from emp group by deptno;
--注意:包含在group by子句中的列不必包含在select列表中

--求出每个部门的员工姓名,要求显示:部门编号、员工姓名
select deptno,wm_concat(ename)from emp group by deptno;

Three, Oracle data packet -having

--求平均工资大于2500的部门,要求显示:部门号,平均工资

--select deptno,avg(sal) from emp where avg(sal)>2500 group by deptno;

--如果条件中包含分组函数,需要通过having子句对分组结果进行过滤
select deptno,avg(sal) from emp group by deptno having avg(sal)>2500;
--注意:不能在where子句中使用组函数,可以在having子句中使用组函数

--在条件中如果没有分组函数,推荐使用where子句,可以先过滤后分组来提高效率
select deptno,avg(sal) from emp where deptno=10 group by deptno;
--注意:如果条件中没有组函数,正常使用where语句就可以

--求部门平均工资的最大值
--嵌套分组函数要与group by子句一起使用
select max(avg(sal)) from emp group by deptno;


--补充
--where使得分组记录数大大降低,从而提高效率
--从SQL优化角度看,尽量使用where子句,先过滤后分组

 

Published 15 original articles · won praise 15 · views 5001

Guess you like

Origin blog.csdn.net/weixin_44337241/article/details/104650657