一:窗口函数
1.1.窗口函数语法
over()用于指定分析函数工作时的数据窗口大小,这个数据窗口大小可能随着行的变化而变化。
窗口函数的基本语法:
<窗口函数> over(partition by <用于分组的列名>
order by <用于排序的列名>)
上述中窗口函数处可以放两类函数
1)专用窗口函数:包括dense_rank(),rank(),row_number()等专用窗口函数
2)聚合函数:例如sum(),avg(),max(),min(),count()。
【注意】:可以注意到专用窗口函数后面括号里是空的,什么也没有写,
但是聚合函数后面括号可不能为空,需要指定聚合的列名。
【注】:因为窗口函数是对where或者group by子句处理后的结果进行的操作,所以窗口函数
原则上只能写在select子句中。
1.2.思考一下窗口函数与我们之前学习的group by区别
1.group by 分组汇总会改变行数(默认返回每组中的第一行);
而partition by和rank()函数不会减少原表中的行数。
1.3窗口函数的功能
为什么叫做窗口函数呢?这是因为partition by分组以后的结果叫做窗口,这里的窗口是范围的意思。
1)窗口函数同时具有分组和排序的功能;
2)不减少原有表的行数
1.4窗口函数是聚合函数时
1)聚合函数作为窗口函数样例
select *,
sum(play_rate) over(order by user_id),
avg(play_rate) over(order by user_id),
max(play_rate) over(order by user_id),
min(play_rate) over(order by user_id),
count(play_rate) over(order by user_id)
from haokan_ads_test02;
2)我们返回的结果如下:
3)探究聚合函数作为窗口函数时其作用范围
以sum()为例,我们讲清楚以聚合函数作为窗口函数时,其作用范围。
聚合函数在窗口函数中,是对自身记录及位于自身记录以上的数据进行求和的结果。
比如user_id为4号,在使用sum窗口函数后的结果,是对1,2,3,4号的play_rate求和,
若是5号,则结果是1号~5号成绩的求和,以此类推。
4ÿ