欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-19 10:08:45
oracle的分组函数 --求平均值avg select avg(sal) from emp; --求和sum select sum(sal) from emp; --求最大值...

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;