oracle 11g 列函数与 分组
1.列函数
1.1 常用列函数的使用
2. 分组
2.1 分组的概念
2.2 GROUP BY子句的使用
2.3 HAVING 子句的使用
3 常用的函数使用
3.1 SUM(expression) 求和
3.2 MAX(expression) 最大值
3.3 MIN(expression) 最小值
3.4 COUNT(expression) 统计记录数
3.5 COUNT(DISDINCT COLNAME) 统计去除重复记录数
4.查询员工的记录数,员工工资的总和,平均工资,最高工资,最低工资
select count(empno), ---记录数
sum(sal), --工资求和
AVG(sal), --平均工资
max(sal), --最大工资
min(sal) --最小工资
from bank_emp ;
5.分组的概念 在一个实体集emp当中,(每一个实体相当于一个记录),都有自己的属性可以按不同的属性进行分组。 比如:在一教室里有很多的学生,如果按性别进行分组的话,是不是分为男生和女生
语法格式:
select 列名,列函数
from 表名
group by 列名
order by 列名
5.1 查询每个部门的人数
select distinct empno from bank_emp;
5.2 使用分组来统计每个部门的人数 注意规则:如果在select子句中,有不在列函数的中的列,则该列一定要出现在group by 之后
selct deptno cont(empno),sum(sql)
from bank_emp
group by deptno;
5.3 练习
5.3.1 查询每个部门的平均工资
select deptno,avg(sql)
from bank_emp
group by deptno;
5.3.2 查询每个部门的年薪
select deptno,sum(sql*12)
from bank_emp
group by deptno;
6.分组查询HAVING子句的使用
6.1 显示出平均工资大于8000的部门编号和平均工资
select deptno,avg(sql*12)
from bank_emp
group by deptno
having sum(sql*12)>8000;
6.2 总计与小计:rollup生成横向小计,cube生成纵向小计
select deptno,job,avg(sql)
from bank_emp
group by rollup(deptno,job);
6.3 显示非办事员(CLERK) 工作名称,以及从事同一工作雇员的月工资的总和,并且要满足雇员的月工资合计大于5000,输出结果按月工资合计升序排序
select job,sum(sql)
from emp
where job <> 'CLERK'
group by sum(sql)
having sum(sql)>5000
order by sum(sql);