sql进阶窗口函数+花式分组rollup

发布于:2022-12-10 ⋅ 阅读:(325) ⋅ 点赞:(0)

本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql

窗口函数概念和使用

窗口函数也称为OLAP函数。

<窗口函数> OVER(PARTITION BY col_name ORDER BY col_name)

其语法规则如上,partition by用来在窗口分组,效果类似group by,而order by则进行窗口的排序。

在这里插入图片描述

窗口函数种类

比较常见的窗口函数,如求和,最大值,最小值等聚合函数,排序使用的rank等排序函数。
前者已经算是老生常谈,在分组的前提下可以求出特定粒度的数据,后者则氛围三种:rank的排序支持同一序列号,但会默认占位;dense_rank同样支持同一序号,却默认不占位;row_number不支持同一序号,默认连续排位。
在窗口函数使用的时候,我们还可以计算的累计到当前行的所有数据的集合,而汇总的范围则称为框架。
在这里插入图片描述

PRECEDING(“之前”), 将框架指定为 “截止到之前 n 行”,加上自身行;FOLLOWING(“之后”), 将框架指定为 “截止到之后 n 行”,加上自身行;BETWEEN 1 PRECEDING AND 1 FOLLOWING,将框架指定为 “之前1行” + “之后1行” + “自身”。
原则上,窗口函数只能在SELECT子句中使用;OVER 中的ORDER BY 子句并不会影响最终结果的排序。其只是用来决定窗口函数按何种顺序计算。

gropuing+rollup+cube

平常的groupby只能针对需要的列分组,比如省会和商品名称粒度下的销售额,但是我还需要单独省会聚合的计算的销售额和不同商品聚合的销售额,写三个表或者union拼接,效果都不理想。
在这里插入图片描述

如果使用rollup,那么出来的结果,就会呈现这样。第一行全部为null表示全部聚合;第二行第一列有值,第二列没有值表示根据厨房用具聚合出现的结果。
同样的效果可以用grouping by,with cube来实现。
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到