数据库分析函数 ROW_NUMBER() rank() dense_rank() 的区别

直接上图

select * from tab

select B,ROW_NUMBER()over(order by B) from tab

当碰到相同数据时,排名按照记录集中记录的顺序依次递增。  遇到相同数据 不影响排序 序列号

select B,rank()over(order by B) from tab

当碰到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。

遇到相同数据 影响排序   值相同 排序序号也相同,下一条数据 指在整张表的排名

select B,dense_rank()over(order by B) from tab

当碰到相同数据时,此时所有相同数据的排名都是一样的。

值相同 排序序号也相同,下一条数据 跟着排名排

时间: 2024-11-08 20:33:58

数据库分析函数 ROW_NUMBER() rank() dense_rank() 的区别的相关文章

ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()

ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over() 今天女票问我SqlServer的四种排序,当场写了几句Sql让她了解,现把相关Sql放上来. 首先,我们创建一些测试数据. if OBJECT_ID('Tempdb.dbo.#Tmp') is not null drop table #Tmp create table #Tmp ( name nvarchar(10) ) insert into #Tmp select N'张三' union sele

Hive分析窗口函数(二) NTILE,ROW_NUMBER,RANK,DENSE_RANK

问题导读: 1.NTILE作用是什么? 2.按照pv降序排列,生成分组内每天的pv名次可使用哪个窗口函数? 3.RANK 和 DENSE_RANK作用是什么? 接上篇:Hive分析窗口函数(一)SUM,AVG,MIN,MAX 本文中介绍前几个序列函数,NTILE,ROW_NUMBER,RANK,DENSE_RANK,下面会一一解释各自的用途. Hive版本为 apache-hive-0.13.1 注意: 序列函数不支持WINDOW子句.(什么是WINDOW子句,Hive分析窗口函数(一)SUM,

sql排序对比(row_number,rank,dense_rank)

不解释,全靠悟性: select loan_num,row_number() over(order by loan_num asc) as 'Row Number',rank() over(order by loan_num asc) as 'Rank',dense_rank() over(order by loan_num asc) as 'Dense Rank'from dbo.tals_loan

Hive ROW_NUMBER,RANK(),DENSE_RANK()

准备数据 浙江,杭州,300 浙江,宁波,150 浙江,温州,200 浙江,嘉兴,100 江苏,南京,270 江苏,苏州,299 江苏,某市,200 江苏,某某市,100 ? 创建表 CREATE table pcp (province string,city string,people int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; ? 导入数据 load data inpath '/tmp/1.tx

Spark2 DataFrame数据框常用操作(九)之分析函数--排名函数row_number,rank,dense_rank,percent_rank

select gender,       age,       row_number() over(partition by gender order by age) as rowNumber,       rank() over(partition by gender order by age) as ranks,       dense_rank() over(partition by gender order by age) as denseRank,       percent_rank

SqlServer四种排序:ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()

今天女票问我SqlServer的四种排序,当场写了几句Sql让她了解,现把相关Sql放上来. 首先,我们创建一些测试数据. if OBJECT_ID('Tempdb.dbo.#Tmp') is not null drop table #Tmp create table #Tmp ( name nvarchar(10) ) insert into #Tmp select N'张三' union select N'李四' union select N'王五' union select N'赵六' u

好用的排名函数~ROW_NUMBER(),RANK(),DENSE_RANK() 三兄弟

排名函数三兄弟,一看名字就知道,都是为了排名而生!但是各自有各自的特色!以下一个例子说明问题!(以下栗子没有使用Partition By 的关键字,整个结果集进行排序) RANK 每个值一个排名,同样的值排同样的位置,如第一名有2个,下一个值就要排第三,如此类推,表现如下面的 RandNr 列 DENSE_RANK 每个值一个排名,跟Rank 不一致的地方在于它不跳号,会1,2,3 那样排下来 ROW_NUMBER 每行一个排序值,遇到相同的排序条件的时候,按照顺序给值,对应表现如下面RowNr

sqlserver 中row_number,rank,dense_rank,ntile排名函数的用法

1.row_number() 就是行号 2.rank:类似于row_number,不同之处在于,它会对order by 的字段进行处理,如果这个字段值相同,那么,行号保持不变 3.dense_rank:与rank类似,不同之处在于行号是否保留一个位置,rank对保留这个位置,即上面图中,row的值由1直接变为3,因为它的1出现了两次,所以为2保留了一个位置,而dense_rank不会保留2这个位置,即实现的行号2其实是排在了第3位 4.ntile函数可以对序号进行分组处理.这就相当于将查询出来的

row_number() rank() dense_rank()

create table A ( Id int identity, Name char(10) ) create table  B ( Id int, [SubJect] char(10), Score int ) --1.查询各科成绩排名前二名的人的编号 No 姓名Name 科目Subject 分数Score select * from (SELECT *,rn=ROW_NUMBER() OVER(PARTITION BY subject ORDER BY  score desc) FROM