原文转载自:http://blog.csdn.net/a5685263/article/details/52187070
以下为转载内容:
首先,我们创建一些测试数据。
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'赵六' union select N'朱七' union select N'王八' union all select N'张三'
PS:最后一个union用union all,因为我们多一行"张三"。
一、ROW_NUMBER() over(partition by columnname order by columnname):
select ROW_NUMBER()over(order by name) as num,* from #Tmp
可以得到按name排序的结果集。
ROW_NUMBER() over()还有一种用法,可以针对某列进行分组排序。
下面结果可以看到张三有1和2两个排序,而其他的名字排序都只有1。
select ROW_NUMBER()over(partition by name order by name) as num,* from #Tmp
结果:
二、RANK()over(order by columnname):
大家可以从下面的结果集看到,结果集少了5的编号,而有两个4的编号,然后直接跳到编号6。
select RANK()over(order by name),* from #Tmp
结果:
三、DENSE_RANK()over(order by columnname):
select DENSE_RANK()over(order by name),* from #Tmp
执行Sql后发现,下面的结果集有2个编号4的行,紧接着就是编号5的行。
DENSE_RANK()函数和RANK()函数差不多。
RANK()函数不管分几组,最后的编号一定和行数相同。
DENSE_RANK()函数最后的编号和分组的数目有关。
四、NTILE()OVER(ORDER BY COLUMNNAME):
select NTILE(2)over(order by name),* from #Tmp select NTILE(3)over(order by name),* from #Tmp
NTILE后面的数字,是要把查询得到的结果平均分为几组。
如下图分为2和3组。
如果行数平均划分后还有余行,那么就把行分在最前面的几组上。
比如我们的结果有7行,要分为3组。
那么第一组3行,第二组2行,第三组2行。
如果我们结果有14行,平均分为3组。
那么第一组5行,第二组5行,第三组4行。
依此类推。
相关推荐
MS SQL 2005 四个排序函数ROW_NUMBER、RANK、DENSE_RANK 和 NTILE简介用法结果排名排序
排名函数是SQL Server2005新加的功能。在SQL Server2005中有如下四个排名函数row_number、rank、dense_rank和ntile,需要的朋友可以参考下。
语法:ROW_NUMBER () OVER ( [ <partition> ] <order> ) 。备注:ORDER BY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。参数:<partition> :将 FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区...
分析函数ROW_NUMBER、RANK、DENSE_RANK的用法
hive中分组取topN、row_number、rank和dense_rank使用介绍
主要介绍了sql四大排名函数之ROW_NUMBER、RANK、DENSE_RANK、NTILE使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
本文主要是对Oracle分析函数Rank, Dense_rank, row_number的使用法,通过这些函数,我们可以对数据进行排序和分组,需要的朋友可以参考下。
“rank()、dense_rank()和row_number()的区别”文章的date
drop table if exists SC; create table SC( Sno char(10), Cno char(10), Grade smallint not null, constraint pk_sno primary key (sno,cno) ) 首先简单创建一个表,并为其插入主码 Insert Into SC (Sno ,...
本技巧文章将讨论ROW_NUMBER(),RANK()和DENSE_RANK()之间的区别。
row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据... rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内) dense_rank()也是连续排序,有两个第二名时仍然跟
Row_number() over()、rank() over()和dense_rank()over()函数的使用 Select * from (select name,class,s,rank() over(partition by class order by s desc) mm from t2) where mm=1; 说明: 1.在求第一名成绩的...
博客文章地址:http://blog.csdn.net/pfe_nova/article/details/41357435 SQL2005之后添加的几个排名函数以及透析与反透析关键字,主要有Row_Number、RANK、DENSE_RANK、NTILE函数,pivot以及unpivot关键字
ROW_NUMBER () OVER([partition_clause] order_by_clause) dense_rank在做排序时如果遇到列有重复值,则重复值所在行的序列值相同,而其后的序列值依旧递增,rank则是重复值所在行的序列值相同,但其后的序列值从...
之前sql server 的排名函数用得最多的应该是RoW_NUMBER()了,我通常用ROW_NUMBER() + CTE 来实现分页;今天逛园,看到另一个内置排名函数还不错,自己顺便想了一个需求,大家可以花1分钟先想想要怎么实现。 需求...