sql高级语法之窗口函数调用

sql高级语法之窗口函数调用

  • DENSE_RANK():为组内值生成连续排序号,其中,相同值具有相同序号
  • LAG():为组内对应值生成滞后值
  • LEAD():为组内对应值生成提前值
  • RANK():为各组内值生成跳跃排序序号,其中,相同的值具有相同序号
  • ROW_NUMBER():为各组内值生成连续排序序号,其中,相同的值其序号也不相同

创建表

create table T_num(
     num int
     );
insert into T_num values(1),(1),(2),(3),(3),(3),(4),(4),(5);

在这里插入图片描述

sql中的over函数和其它函数配合使用,可生成行号

DENSE_RANK()

为组内值生成连续排序号,其中,相同值具有相同序号。

 select num,DENSE_RANK() OVER(order by num) AS 'DENSE_RANK' from T_num;

在这里插入图片描述
右侧为对num的排序序号,DENSE_RANK()的排序规则为,如果数字相等则排序的序号相等,且相等序号不占一位,下一个数的排序序号从此序号加1开始。

RANK()

为各组内值生成跳跃排序序号,其中,相同的值具有相同序号。

select num,RANK() OVER(order by num) AS 'RANK' from T_num;

在这里插入图片描述
RANK()函数的排序规则为,如果数字相等则排序的序号相等,且每一个相等序号隐含占一位,下一个数的排序序号从此序号加上所有的此序号的个数开始,如上图num=2的序号=1+2=3.,即它会“跳跃”。

ROW_NUMBER()

为各组内值生成连续排序序号,其中,相同的值其序号也不相同。

select num,ROW_NUMBER() OVER(order by num) AS 'RANK' from T_num;

在这里插入图片描述
ROW_NUMBER()的排序规则为,所有数字按连续序号排序,相同的num也需要排出1、2、3…

LAG()
为组内对应值生成滞后值。

select num,LAG(NUM) OVER(order by num) AS 'LAG' from T_num;

在这里插入图片描述
即将其选中的项滞后一位输出,第一位补为NULL,其余按需输出,最后一位不输出

LEAD()

LEAD()函数恰好与LAG()函数相反。为组内对应值生成提前值。

 select num,LEAD(NUM) OVER(order by num) AS 'LEAD' from T_num;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

齊 天 大 聖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值