多行函数
1 什么叫多行函数?
1.1 常用的多行函数
null值在组函数的使用中会自动滤空。我们也可以嵌套滤空函数来屏蔽他的滤空功能。
2 分组数据:group by
在Oracle中使用group by语句必须要注意两点!
- 在SELECT 列表中所有未包含在组函数中的列都应该包含在GROUP BY子句中。
- 包含在GROUP BY子句中的列不必包含在SELECT列表中。
- 多个列的分组:先按照第一个列分组,如果相同,再按第二个列分组,以此类推。
2.1 过滤分组数据:HAVING子句
下面是使用实例:
2.1.1 where和having的区别
- 不能在WHERE子句后使用组函数。
- 可以在HAVING子句中使用组函数。
- 当WHERE和HAVING都能够使用的场景下,尽量使用where。原理是当使用where时是先过滤在group分组,而使用having时是先分组后过滤。所以在处理大批量数据是where的使用会较为优化。
2.2 group by语句的增强
当前有个需求:按照部门统计各部门不同工种的工资情况,要求按如下格式输出。(做报表)
SQL如下:
rollup的使用:
group by rollup(a,b)
=
group by a,b
+
group by a
+
没有group by
但当我们在命令行中敲select deptno,job,sum(sal) from emp group by rollup(deptno,job);执行时,显示结构却并不像报表形式展示。实际如下。
我们可以看见DEPTNO字段显示的还是有冗余,那么我们该怎么显示成报表格式的结果展示呢?
如果要取消以上设置则执行break on null就好。