oracle聚合函数

来源:互联网 发布:ubuntu lamp环境 编辑:程序博客网 时间:2024/06/08 01:51

常用函数:

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 deptnoselect 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 ewhere e.job<>'SALESMAN'GROUP BY e.jobHAVING sum(e.sal)>5000order by sum(e.sal)


原创粉丝点击