oracle分组函数
admin
2023-05-08 23:01:59
0次

分组函数:作用于一组值,并对一组数据返回一个值;

分组函数的使用:

常用的分组函数:

Avg(求平均值),sum(求总和),min(求最小值),max(求最大值),count(求总个数),wm_concat(行转列)

例:select count( distinct deptno) from emp ;

行转列: select deptno 部门号,wm_concat(ename) 部门中员工的名字  from emp group by deptno;

----------------------------------------------------

分组函数与空值:(分组函数会自动忽略空值)

1.      统计员工的平均工资

Select sum(sal)/count(*) 一,sum(sal)/count(sal) 二,avg(sal) 三 from emp;

 

2.      统计员工的平均奖金

Select sum(comm)/count(*)一,  sum(comm)/count(comm) 二,avg(comm) 三from emp;

 

注意:nvl函数使分组函数无法忽略空值

Selectsum(comm)/count(*)一,   sum(comm)/count(nvl(comm,0)) 二from emp;

Comm为空时,nvl函数返回0,0不为null,所以count不会忽略

------------------------------------------------------

Group by子句的使用

1.求部门号和部门的平均工资

Selectdeptno,avg(sal) from emp

Group bydeptno;

 抽象:

Selecta,b,c,avg(x) from table

Group bya,b,c;

规定:在select列表中所有未包含在组函数中的列都应该包含在group by 子句中;

相反的,在group by 中的列,不必包含在组函数中

 

多个列的分组:(分组逻辑:先按照group by 后面第一个列分组,如果第一个列相同,再按照第二个列分组,如果所有的列都相同,那么这就是同一组中的数据)

按照部门,不同的职位,统计员工工资的总额

Select deptno,job ,sum(sal) from emp

Group by deptno,job;



-------------------------------------------------------

Having子句的使用:(过滤分组后的数据)

平均工资大于2000的部门

Select deptno,avg(sal)

From emp

Having  avg(sql)>2000;

 

Where和having的区别:

在where子句后面不能使用分组函数

 

Where和having可以通用的情况(没有分组函数的情况下可以通用,但是从

Sql优化的角度上考虑,尽量使用where):

查询10号部门的平均工资

1.      Where

Select deptno,avg(sal) from emp wheredeptno=10 group by deptno

 

2.      Having

Select deptno,avg(sal) from empgroup by deptno having deptno=10

-----------------------------------------------------------------------------

在分组函数中使用orderby 排序(默认是asc升序)

1.Select deptno ,avg(sal)

From emp

Group by deptno

Order by avg(sal)

2.

Select deptno ,avg(sal)

From emp

Group by deptno

Order by 2—这里的2代表select语句后面的第二列,这里即avg(sal)

----------------------------------------------------------------------------

分组函数的嵌套

Select  max(avg(sal))

From emp

Group by deptno;

-----------------------------------------------------------------------

Group by 语句的增强:

(1)Selext deptno,job,sum(sal)

From emp

Group by deptno,job

 

(2)Select deptno,sum(sal)

From emp

Having deptno

 

(3)Select sum(sal) from emp

 等价于(1)+(2)+(3)

Select deptno,job,sum(sal) from emp group byrollup(deptno,job);

语法:

Group by rollup(a,b)

等价于:groupby a,b+group by  a+group by null

 

Break on deptno skip 2;--相同的部门号只显示一次,不同的部门号之间

跳过两行

--详细的可以看看sql-plus的报表功能

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...