oracle统计几组,08-oracle统计函数(单组分组函数)

本文介绍了如何使用SQL进行数据统计和分析,包括count、max、min、sum、avg等统计函数的应用,以及group by和having子句的用法。通过实际案例展示了如何计算中位数、部门平均工资、职位工资范围等。
摘要由CSDN通过智能技术生成

--count时尽量count(列名),count(*)也可以。

--count,max,min,sum,avg,median(中位数)

select count(empno),count(distinct job),max(hiredate),min(hiredate),sum(sal),round(avg(sal),2)

from emp;

e4e11973c13d3684620252fe93d0fb7e.png

--median:中位数(中间值),一组按大小顺序排列的数据,处于中间位置的数。

--行数为奇数时取中间行的数值(19行/2取9行的值),偶数时取中间2行数值的平均值(若18行则中位数的值为(9行+10行)除以2)。

--如sal共15行,第8行即中位数(中间值)

select median(sal) from emp;

--使用group by统计每个部门的人数

select deptno,count(deptno)

from emp

where deptno is not null

group by deptno;

8425676c2949bfa8813dafbea76f4502.png

--group by 以职位分组,查询出每个职位的最低和最高工资

select job,min(sal),max(sal)

from emp

group by job;

a2c27bc682d27a6d0eaff3e25f6b6e71.png

6e5a565ef2b94bb1cf6250c0cf26625d.png

--数据统计时,语句中没有group by时,select的选项只能出现统计函数(count(),sum(),max(),min(),avg());

aac3287ef96f392cb3f99c7fd5d3ba17.png

--数据统计时,语句中有group by时,select的选项只能出现统计函数和group by排序使用的分组字段(即列名);

select job,count(ename) from emp group by job;

b5c67ec12588a1836438fe8c0981caab.png

--数据统计时,使用嵌套函数时,无论与剧中有没有group by ,select选项中只允许出现嵌套行数,其它字段均不允许出现。

eaaf2ad482c6c8609fe4ba880d7de88b.png

--重复的列可以进行分组(GROUP BY),SQL语句执行顺序为FROM,WHRER,GROUP BY,SELECT,ORDER BY

--查询部门名称,部门人数,平均工资,平均工作年限

SELECT D.DNAME 部门名称,count(ename)部门人数,ROUND(AVG(SAL),2)平均工资,ROUND(AVG(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12),2)平均工作年限

FROM EMP E FULL OUTER JOIN DEPT D ON( E.DEPTNO=D.DEPTNO)

GROUP BY D.DNAME;

4cff634c76a147be6f61fd547a1a8980.png

--查询工资各个等级工资的雇员人数,平均工资

SELECT TRIM(S.GRADE),DECODE(S.GRADE,1,'A',2,'B',3,'C',4,'D',5,'E') 工资等级,COUNT(E.ENAME) 雇员人数,ROUND(AVG(E.SAL),2) 平均工资

FROM EMP E,SALGRADE S

WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL

GROUP BY S.GRADE

ORDER BY 工资等级

7ce9e2fd7a7f18dcbee03c8cdf9060db.png

--查询领取佣金和不领取佣金的平均工资,平均工作年限,雇员人数

SELECT '不领取佣金',AVG(SAL)平均工资,ROUND(AVG(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12),2)平均工资年限,COUNT(EMPNO)雇员人数

FROM EMP E WHERE E.COMM IS NULL

UNION

SELECT '领取佣金',AVG(SAL)平均工资,ROUND(AVG(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12),2)平均工资年限,COUNT(EMPNO)雇员人数

FROM EMP E WHERE E.COMM IS NOT NULL;

06bf6ac6bacf2e2874d2f18f3449fd52.png

--多字段分组

6a9f5982f4b5218ac881a2b75dc6a0ff.png

--GROUP BY 字段1,字段2

--查询部门详细信息:部门名称,部门编号,部门位置,平均工资,总工资,雇员人数

SELECT D.DNAME,D.DEPTNO,D.LOC,ROUND(AVG(E.SAL),2),SUM(SAL),COUNT(E.ENAME)

FROM DEPT D,EMP E

WHERE D.DEPTNO=E.DEPTNO(+)

GROUP BY D.DNAME,D.DEPTNO,D.LOC;

7ca4bb266b8b5af4db325a44b8b14dea.png

8bb96cba04bd8a6bea32e16369a13b85.png

--HAVING 必须和GROUP BY一起使用

--查询所有平均工资大于2000的职位信息,平均工资,雇员人数

SELECT E.JOB,ROUND(AVG(SAL),2),COUNT(E.ENAME)

FROM EMP E

GROUP BY E.JOB

HAVING AVG(SAL)>2000;

10f4326716e0be2d29d4bbc338d77e4b.png

--查询不包含销售的的工作名称,从事同一工作的雇员工资总和,且工资大于5000,并按照从低到高排序

select E.JOB,SUM(E.SAL) A

from emp e

where e.job !='SALESMAN'

GROUP BY E.JOB

HAVING SUM(E.SAL)>5000

ORDER BY A DESC;

856cfab06cfdccd93913dc3abe46843a.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值