SQLServer针对排名函数ROWNUMBER()、RANK()、DENSE_RANK()、NTILE的研究!~

本文详细解释了SQLServer中ROWNUMBER(), RANK(), DENSE_RANK() 和 NTILE() 函数的功能及应用场景,并通过实例展示了这些函数如何处理相同值的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ROWNUMBER():不关心行具有相同的值的问题,持续递增,类似于IDENTITY。
RANK():允许行具有相同的值的时候相同的排名,在遇到不同的值得时候重新进行ROWNUMBER()排名。
          例如N个相同的值排名为1, 那么在N+1的时候排名采用ROWNUMBER()的值也就是N+1.
DENSE_RANK():允许行具有相同的时候相同的排名,在遇到不同的值得时候采用上次的排名进行+1处理。 
         例如N个相同的值排名为1,那么在N+1的时候排名 采用上次的排名值也就是N+1.
NTILE(X):这个函数可以说很少使用。几乎是个废柴,看上面的代码就明白了。

SQLServer针对排名函数ROWNUMBER()、RANK()、DENSE_RANK()、NTILE的研究!

USE test;
If EXISTS (SELECT * FROM sys.objects where name = N'EmployeOrdersCount' AND Type In ('S','U'))
	DROP TABLE EmployeOrdersCount
Else 
	Create Table EmployeOrdersCount(
	Id int PRIMARY KEY IDENTITY ,
	EmployeNo NVARCHAR(50) ,
	OrdersCount int , 
	)	
	
	Insert into EmployeOrdersCount (EmployeNo , OrdersCount)
	Values ('100',100),('102',100),('103',100),('104',100),
    ('105',100),('106',99),('107',99),('108',99),('109',98),
    ('110',98),('111',97),('112',96),('113',100)
    
    -------------------------------------------------------
    
SELECT ROW_NUMBER() OVER (ORDER BY OrdersCount desc) AS 'RowNumber',
	RANK() OVER (ORDER BY OrdersCount desc) AS 'Rank',
	DENSE_RANK() OVER(ORDER BY OrdersCount desc)  AS 'Dense_Rank',
	NTILE(4) OVER(ORDER BY OrdersCount desc) AS 'Ntile',
	EmployeOrdersCount.Id,EmployeOrdersCount.EmployeNo,EmployeOrdersCount.OrdersCount
	From EmployeOrdersCount
	select * from EmployeOrdersCount

结果:

RowNumber	Rank	Dense_Rank	Ntile	Id	EmployeNo	OrdersCount
1		1	1		1	1	100		100
2		1	1		1	2	102		100
3		1	1		1	3	103		100
4		1	1		1	4	104		100
5		1	1		2	5	105		100
6		1	1		2	13	113		100
7		7	2		2	6	106		99
8		7	2		3	7	107		99
9		7	2		3	8	108		99
10		10	3		3	9	109		98
11		10	3		4	10	110		98
12		12	4		4	11	111		97
13		13	5		4	12	112		96

消息:

(13 row(s) affected)

Tips:多动手写写。。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值