SQLServer针对排名函数ROWNUMBER()、RANK()、DENSE_RANK()、NTIL
发布时间:2020-12-12 13:40:42 所属栏目:MsSql教程 来源:网络整理
导读:ROWNUMBER():不关心行具有相同的值的问题,持续递增,类似于IDENTITY。RANK():允许行具有相同的值的时候相同的排名,在遇到不同的值得时候重新进行ROWNUMBER()排名。 例如N个相同的值排名为1, 那么在N+1的时候排名采用ROWNUMBER()的值也就是N+1.DENSE_RANK
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',('103',('104',('105',('106',99),('107',('108',('109',98),('110',('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:多动手写写。。。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |