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、分组函数结合 whereorder by ,注意语法顺序:

8、小计(rollup ):

微调:

rollup,生成分级小计数据

9、grouping

可以看到,grouping 标识除了哪些值是小计的结果

提醒:另外产生的值也可以用于排序哦

10、cube

cube,相比于 rollup,有着更多的复杂和有趣的分组,上面的例子中,rollup 仅有三阶分组,分别是,所有合计、部门分组合计、销售员分组合计及基本的数据,而 cube 则产生了更多的分组,除了 rollup 已有的分组,还包括销售员单独的分组合计、月份单独的分组合计、销售员和月份的分组合计,可以理解为 rollup 遍历了仅以本身为节点的树,而 cobe 遍历了所有树

加上 grouping 理解:

最后修改:2021 年 10 月 25 日
如果觉得我的文章对你有用,请随意赞赏