SQLServer 排名函数

来源:互联网 发布:软件测试大纲模板 编辑:程序博客网 时间:2024/04/28 04:59
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
-------------------- -------------------- -------------------- -------------------- --------------- -----------
                                                                            100             100
                                                                            102             100
                                                                            103             100
                                                                            104             100
                                                                            105             100
                                                                            113             100
                                                                            106             99
                                                                            107             99
                                                                            108             99
10                   10                                                         109             98
11                   10                                                         110             98
12                   12                                                         111             97
13                   13                                                         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):这个函数可以说很少使用。几乎是个废柴,看上面的代码就明白了。
0 0
原创粉丝点击