oracle教程之Oracle的分组函数与数据分组详解及举例

oracle的分组函数

--求平均值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;

oracle的数据分组—groupby

--求出每个部门的平均工资,要求显示:部门号,部门的平均工资
select deptno,avg(sal) from emp group by deptno;

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

--求出每个部门的平均工资,要求显示:每个部门的平均工资。
select avg(sal)from emp group by deptno;

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

oracle的数据分组-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子句,可以先过滤后分组来提高效率
select deptno,avg(sal) from emp where deptno=10 group by deptno;

--求部门平均工资的最大值
--嵌套分组函数要与group by子句一起使用
select max(avg(sal)) from emp group by deptno;
(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐