一、窗口函数功能简介
sum(c) over(partition by a order by b)
按照一定规则汇总c的值,具体规则为以a分组,每组内按照b进行排序,汇总第一行至当前行的c的加和值。
-
sum()
:对某个字段求和。 -
over()
:开窗,按照某种规则,将数据分组、分窗口计算。 -
sum() over()
:对所有行进行求和。 -
sum() over(order by)
:按照order by
对应字段的顺序,进行累计求和,即第一行到当前行,默认order by
是升序排序(asc),也可以通过指定降序排序(desc)。
二、三种用法
sum()
函数的升级用法,开窗函数(也叫分析函数)sum() over()
一般有三种用法:
-
分组求和
-
累计求和
-
滑动求和
三、使用案例
我们以一个案例分别看下三种求和场景的SQL代码写法:
数据样本
我们的数据样本为一个名叫dws_js_team_gmv
的底表,字段依次为team_name
(销售团队)、month
(月份)、gmv
(成交额)
三种求和场景的SQL代码写法
- 题目:请统计各销售团队年累计成交额,及各销售团队各月成交额对累计成交的贡献占比
解题思路:只是分组求和的话sum()
就能实现,按题目要求,需要实现分组求和的同时又保留目前的数据行数,因此考虑在查取已有字段的基础上增加分组求和值
SQL逻辑:
SELECT team_name --团队
,month --统计月份
,gmv --当月成交额
--对gmv按照team_name分组求和,相当于小组gmv的小计
,