oracle聚合函数

常用函数:

count():查询表中的数据记录

avg():求出平均值

sum():求和

max():求出最大值

min():求出最小值

--统计员工人数
select count(*) from emp
--统计员工的平均工资
select to_char(trunc(avg(sal),2),'999,999.99')from emp
--统计一个月员工工资总数
select to_char(sum(sal),'999,999')from emp
--统计员工最高工资
select max(sal) from emp
--统计员工工资最低的
select min(sal) from emp
分组查询:

首先必须明确一点,什么情况下可能分组

1、公司的所有雇员,要求男性一组,女性一组,之后可以统计男性和女性的数量

2、按照年龄分组,18岁以上分一组,18岁一下分一组

3、按照地区分组,北京人一组,上海人一组

这些信息如果都保存了数据库之中,肯定在数据的某一列上会存在重复内容

所以分组之中有一个不成文的规定:当数据重复的时候分组才有意义,因为一个人也可以一组

--按照部门编号,求出每个部门的人数
select count(*) from emp group by deptno
--按照部门编号,求出每个部门的人数及平均工资
select count(*),trunc(avg(sal),2) from emp group by deptno
分组查询的限制:
1、分组函数可以在没有分组的时候单独使用,可是却不能出现其他的查询字段

2、如果要进行分组的话,则select子句之后,只能出现分组的字段和统计函数,其他的字段不能出现

--按照部门编号,求出每个部门的人数
select count(*) from emp group by deptno
--按照部门编号,求出每个部门的人数及平均工资
select deptno, count(*),trunc( avg(sal),2) from emp group by deptno
select job, max(sal),min(sal) from emp group by job 
select  max(avg(sal))from emp group by job

having子句:
如果要对分组后的数据再次过滤,则使用having子句完成

where和having区别:

where:是在执行group by 操作之前进行的过滤,表示从全部数据之中帅选出部分的数据,在where之中不能使用统计函数

having:是在group by分组之后的再次过滤,可以在having子句中使用统计函数

写的顺序:select ... from ... where ... group by ... having ... order by ...

执行的顺序:from ... where ... group by ... having ... select ... order by ...

-- 显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,
-- 并且要满足从事同一工作的雇员的月工资合计大于$5000,
-- 输出结果按月工资的合计升序排列
select e.job,sum(e.sal) from emp e
where e.job<>'SALESMAN'
GROUP BY e.job
HAVING sum(e.sal)>5000
order by sum(e.sal)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值