序列函数

Posted zhuziz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了序列函数相关的知识,希望对你有一定的参考价值。

row_number:会对所有数值,输出不同的序号,序号唯一且连续,如:1、2、3、4、5。
rank:会对相同数值,输出相同的序号,而且下一个序号间断,如:1、1、3、3、5。
dense_rank:会对相同数值,输出相同的序号,但下一个序号不间断,如:1、1、2、2、3。

1.ROW_NUMBER()

row_number() OVER (PARTITION BY COL1 ORDER BY COL2)

表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。

-- rn_id 按照性别分组,按照id排序
select sex,name,id,
row_number() over(partition by sex order by id desc) as rn_id
from student_grouping;

-- 运行结果
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 3.07 sec HDFS Read: 9758 HDFS Write: 298 SUCCESS
Total MapReduce CPU Time Spent: 3 seconds 70 msec
OK

boy     name6   6       1
boy     name5   5       2
boy     name4   4       3
boy     name2   2       4
boy     name1   1       5
girl    name8   8       1
girl    name7   7       2
girl    name3   3       3

 

一个查询语句,有两个row_number(),并且两个分组一样,但排序不一样,查询出来的数据会跟着哪个走?

-- rn_id 按照性别分组,按照id排序
-- rn_age 按照性别分组,按照age 排序
select sex,name,id,age,
row_number() over(partition by sex order by id desc) as rn_id,
row_number() over(partition by sex  order by age desc) as rn_age
from student_grouping;

查询结果:

技术图片

2.RANK()、dense_rank()

row_number:会对所有数值,输出不同的序号,序号唯一且连续,如:1、2、3、4、5。
rank:会对相同数值,输出相同的序号,而且下一个序号间断,如:1、1、3、3、5。
dense_rank:会对相同数值,输出相同的序号,但下一个序号不间断,如:1、1、2、2、3。
 
示例:
三个函数的结果比对
select sex,name,id,age,
rank() over(partition by sex order by age desc) as rk1,
dense_rank() over(partition by sex  order by age desc) as rk2,
row_number() over(partition by sex order by age desc) as rn1
from student_grouping;

查询结果

技术图片

 

 

以上是关于序列函数的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——声明函数

VSCode自定义代码片段8——声明函数

在 Visual Studio 中创建构造函数的代码片段或快捷方式

调用模板化成员函数:帮助我理解另一个 *** 帖子中的代码片段

Java mp4parser 片段序列不连续

web代码片段