SQLServer 排名函数

USE MyDB;
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,--主键ID
   EmployeNO NVARCHAR(15),         --员工编号
   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'
               ,EmployeNO, OrdersCount
           FROM EmployeOrdersCount

 

RowNumber                       Rank                                 Dense_rank                     ntile                               EmployeNO             OrdersCount
-------------------- -------------------- -------------------- -------------------- --------------- -----------
                                     1                                       1                                       1                                       100                         100
                                     1                                       1                                       1                                       102                         100
                                     1                                       1                                       1                                       103                         100
                                     1                                       1                                       1                                       104                         100
                                     1                                       1                                       2                                       105                         100
                                     1                                       1                                       2                                       113                         100
                                     7                                       2                                       2                                       106                         99
                                     7                                       2                                       3                                       107                         99
                                     7                                       2                                       3                                       108                         99
10                                     10                                     3                                       3                                       109                         98
11                                     10                                     3                                       4                                       110                         98
12                                     12                                     4                                       4                                       111                         97
13                                     13                                     5                                       4                                       112                         96

(13 行受影响)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值