请注意,本文编写于 593 天前,最后修改于 593 天前,其中某些信息可能已经过时。
在Oracle SQL 基础 查询 简单提过分组函数,本文详细列举相关示例,包括 having、rollup、cube 的用法,后两者多用于“小计”。
以部门、员工、月度、销售额数据为例:
create table TMP_GRO
(
dep VARCHAR2(10),
name VARCHAR2(10),
month VARCHAR2(10),
volumn NUMBER
);
1、每人销售额统计:
2、销售额不足3000的员工(having):
where、having 都是用来筛选数据,having 正对分组之后的数据筛选
3、每个员工销售额与部门平均值的差(over ,不与聚合函数同时使用,此处切分为子查询):
over 分析函数可以理解为分组函数的高阶用法
4、分组函数多与聚合函数搭配使用,如果不使用聚合函数,结果与“去重”一致:
5、其他聚合函数:avg,max,min,count 等,单独提一下 wm_concat :
wm_concat 默认逗号作为分隔符,要想修改分隔符,可以用 replace 函数处理,或者单独创建方法
7、分组函数结合 where 和 order by ,注意语法顺序:
8、小计(rollup ):
微调:
rollup,生成分级小计数据
9、grouping :
可以看到,grouping 标识除了哪些值是小计的结果
提醒:另外产生的值也可以用于排序哦
10、cube
cube,相比于 rollup,有着更多的复杂和有趣的分组,上面的例子中,rollup 仅有三阶分组,分别是,所有合计、部门分组合计、销售员分组合计及基本的数据,而 cube 则产生了更多的分组,除了 rollup 已有的分组,还包括销售员单独的分组合计、月份单独的分组合计、销售员和月份的分组合计,可以理解为 rollup 遍历了仅以本身为节点的树,而 cobe 遍历了所有树。
加上 grouping 理解: