Labels

Monday, January 2, 2012

Ranking Functions

-- Microsoft T-SQL ranking functions comparison
------------
-- MSSQL row_number (row number sequence) - NTILE
-- MSSQL rank and dense_rank functions - over order by clause
-- Data is rounded down to the thousands for ranking
USE AdventureWorks;
SELECT  
         c.AccountNumber                  AS CustAccount,
         FLOOR(h.SubTotal /1000)          AS [SubTotal (Thousands $)],
         ROW_NUMBER()
           OVER(ORDER BY FLOOR(h.SubTotal /1000) DESC) AS RowNumber,
         RANK()
           OVER(ORDER BY FLOOR(h.SubTotal /1000) DESC) AS Rank,
         DENSE_RANK()
           OVER(ORDER BY FLOOR(h.SubTotal /1000) DESC) AS DenseRank,
         NTILE(5)
           OVER(ORDER BY FLOOR(h.SubTotal /1000) DESC) AS NTile
FROM     Sales.Customer c
         INNER JOIN Sales.SalesOrderHeader h
           ON c.CustomerID = h.CustomerID
         INNER JOIN Sales.SalesTerritory t
           ON h.TerritoryID = t.TerritoryID
WHERE    t.Name = 'Germany'
  AND    YEAR(OrderDate) = 2004
  AND    SubTotal >= 4000.0
ORDER BY RowNumber;
GO
/* Results
CustAccountSubTotal (Thousands $)RowNumberRankDenseRankNTile
AW000002301001111
AW00000230882221
AW00000302773331
AW00000320684441
AW00000536685441
AW00000536646651
AW00000266587761
AW00000302448872
AW00000687439982
AW0000048236101092
AW0000017636111092

No comments:

Post a Comment