视频网站开发公司,新站加快网站收录,企业备案增加网站,提高工作效率整改措施开窗函数的详细用法 第一章、开窗函数的语法1.1#xff09;从聚合开窗函数讲起1.2#xff09;开窗函数之取值1.3#xff09;排名开窗函数 第一章、开窗函数的语法
开窗函数的语法为#xff1a;over(partition by 列名1 order by 列名2 )#xff0c;括号中的两个关键词par… 开窗函数的详细用法 第一章、开窗函数的语法1.1从聚合开窗函数讲起1.2开窗函数之取值1.3排名开窗函数 第一章、开窗函数的语法
开窗函数的语法为over(partition by 列名1 order by 列名2 )括号中的两个关键词partition by 和order by 可以只出现一个。over() 前面是一个函数如果是聚合函数那么order by 不能一起使用。
1.1从聚合开窗函数讲起
sum()是聚合函数当 sum()函数 后面跟上 over()以后由sum聚合函数就成为了开窗函数。
over() 括号里面就是定义窗口的内容了partition 是分区,分组的意思。partition by 就是根据某个字段分组。
sum(score) over(partition by name )先根据 name 分组(如图)当前面加了sumscore后就把根据name分组后的每个组窗口里面的字段 score进行求和操作。
select *,sum(score) over(partition by name) sum窗口函数举例
from kchs
-- 为了简单就只有两个字段name和score聚合函数同样需要对数据进行排序但不会显示排名结果。会将当前名次的数据 与 排在这之前的所有数据 依次做相应的计算。
执行语句
select *,
sum(score) over (order by id) as 累加求和
from kchs拓展一下 一很多聚合函数都可以用作窗口函数的运算如SUM、AVG、MAX、MIN、COUNT。 二和gropu by 不同的是窗口函数会生成多行而不是想group by 一样只有一行
1.2开窗函数之取值
first_valuefirst_valueleadlagfirst_value是在窗口里面取到第一个值
first_value(score) over( partition by name)as first_score ,
根据name分区组取score列的第一个值last_value是在窗口里面取到最后一个值
last_value(score) over(partition by name) as last_score
--根据name分区组取score列的最后一个值lead 是取当前行的后 N 条数据并且可以设置默认值
lead(score,1,0) over(partition by name ) as lead_score
--根据name分区组score列当前行的后面N行如果没有就为默认值0lag 是取当前行的上 N 条数据并且可以设置默认值
lag(score,1,0) over(partition by name ) as lag_score
--根据name分区组score列当前行的上面N行如果没有就为默认值01.3排名开窗函数
ROW_NUMBERDENSE_RANKRANKrow_number ()是为每组的行设置一个连续的递增的数字123456
ROW_NUMBER() over( partition by name order by score asc)as ROW_NUMBER_score rank()是排名也为每一组的行生成一个序号,如果有相同的值会生成相同的序号并且接下来的序号是不连序的。例如有三个人并列第一名第四名序号为四111456
rank() over(partition by name order by score asc) as RANK_scoreDENSE_RANK和RANK类似不同的是如果有相同的序号那么接下来的序号不会间断。例如有三个人并列第一第四名序号为2111234
DENSE_RANK() over(partition by name order by score asc) as DENSE_RANK_score注意 一排名开窗函数可以单独使用ORDER BY 语句也可以和PARTITION BY同时使用。 二ORDER BY 指定排名开窗函数的顺序在排名开窗函数中必须使用ORDER BY语句。 三PARTITION BY用于将结果集进行分组开窗函数应用于每一组。