分组函数
一常用分组函数
1.avg (平均值) 2.sum(求和) 3.min(最小值) 4.max(最大值)5.count(记数)6.wm_concat(行转列)
2.disticnt 去除重复
4wm_concat
例 : select deptno 部门号 ,wm_concat 部门员工的姓名 from emp group by deptdeptno
作用:将同一部门员工的名字合并到同一列上
* 使用分组函数遇到的问题
求平均值
select sum(sql)/count (*) one ,sum(sql)/count(sql) two ,avg (sql) three from emp;
值不同原因 : 有空值造成分母数目不同
结论:分组函数会自动过滤空值
nvl 函数 作用 :可以使分组函数无法忽略空值。
nvl(sql,0):当第一个参数为null时返回第二个参数。
group by 子句使用
1.使用规范:
包含在group up 子句中列不必包含在select列表中。order by 排序
having 过滤分组
1.例:
求平均工资大于>500的部门
select deptno , avg (sal)from emp group by deptno having avg(sal) >500
having 和 where 的比较
1.从sql优化的角度尽量使用 where 子句 (where 在 group up 前, having 在 group up后)。
原因(where>having):
having 先分组,后过滤 ; where 先过滤,后分组。
group up 语句加强
1.group by rollup (a,b) = group by a,b +group by a + group by null