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);

2345_image_file_copy_605.jpg

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

DENSE_RANK()

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

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

2345_image_file_copy_606.jpg

右侧为对num的排序序号,DENSE_RANK()的排序规则为,如果数字相等则排序的序号相等,且相等序号不占一位,下一个数的排序序号从此序号加1开始。

RANK()

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

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

2345_image_file_copy_607.jpg

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

ROW_NUMBER()

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

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

2345_image_file_copy_608.jpg

ROW_NUMBER()的排序规则为,所有数字按连续序号排序,相同的num也需要排出1、2、3…LAG()

为组内对应值生成滞后值。

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

2345_image_file_copy_609.jpg

即将其选中的项滞后一位输出,第一位补为NULL,其余按需输出,最后一位不输出

LEAD()

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

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

2345_image_file_copy_610.jpg

相关文章
|
4月前
|
SQL 存储 Unix
Flink SQL 在快手实践问题之设置 Window Offset 以调整窗口划分如何解决
Flink SQL 在快手实践问题之设置 Window Offset 以调整窗口划分如何解决
70 2
|
1月前
|
SQL 存储 关系型数据库
SQL `CREATE DATABASE` 语法
【11月更文挑战第10天】
63 3
|
1月前
|
SQL 关系型数据库 数据库
sql语法
【10月更文挑战第26天】sql语法
35 5
|
2月前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)
|
2月前
|
SQL 存储 关系型数据库
mysql SQL必知语法
本文详细介绍了MySQLSQL的基本语法,包括SELECT、FROM、WHERE、GROUPBY、HAVING、ORDERBY等关键字的使用,以及数据库操作如创建、删除表,数据类型,插入、查询、过滤、排序、连接和汇总数据的方法。通过学习这些内容,读者将能更好地管理和操
32 0
|
2月前
|
SQL 关系型数据库 MySQL
Mysql(2)—SQL语法详解
SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准编程语言。它主要用于数据的查询、插入、更新和删除等操作。SQL最初在1970年代由IBM的研究人员开发,旨在处理关系数据模型。
37 0
|
2月前
|
SQL 数据库
SQL:如何使用窗口函数实现高效分页查询??
SQL:如何使用窗口函数实现高效分页查询??
35 0
|
4月前
|
SQL 流计算
Flink SQL 在快手实践问题之CUMULATE窗口的划分逻辑如何解决
Flink SQL 在快手实践问题之CUMULATE窗口的划分逻辑如何解决
100 2
|
4月前
|
SQL 流计算
Flink SQL 在快手实践问题之Window TVF改进窗口聚合功能如何解决
Flink SQL 在快手实践问题之Window TVF改进窗口聚合功能如何解决
34 1
|
4月前
|
SQL 关系型数据库 MySQL
INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
【8月更文挑战第7天】INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
48 5
下一篇
DataWorks