Quelle est la différence entre les fonctions RANK () et ROW_NUMBER () dans SQL Server ?

0
141

ROW_NUMBER : Renvoie un nombre unique pour chaque ligne commençant à 1.
Pour les lignes qui ont des valeurs en double, les numéros sont attribués arbitrale.

RANK Attribue un numéro unique pour chaque ligne commençant par 1, sauf pour les lignes qui ont des valeurs en double, dans ce cas, le même classement est attribué et un écart apparaît dans la séquence pour chaque classement en double.

DENSE_RANK
:Retourne le rang de lignes au sein de la partition d’un ensemble de résultats, sans aucune lacune dans le classement. Le rang d’une ligne est un plus le nombre de rangs distincts qui viennent avant la ligne en question.

Nous allons voir la différence entre ces 3 fonctions basées sur un exemple:

CREATE TABLE dbo.Grades
(Names VARCHAR(1),
Grade INT )                                                           
INSERT INTO dbo.Grades                                                
VALUES ('A',100),('B',90),('C',80),('D',70),('E',70),('F',60)         
 SELECT Names,
     Grade,
     ROW_NUMBER () OVER (ORDER BY Grade DESC) as ROW_NUMBER,
       RANK () OVER (ORDER BY Grade DESC) as RANK,
       DENSE_RANK () OVER (ORDER BY Grade DESC) as DENSE_RANK,
       NTILE(3) OVER(ORDER BY Grade desc) AS NTILE
FROM dbo.Grades
Les résultats:
Sans titre
Comme vous pouvez le voir, ROW_NUMBER retourne un numéro de série pour chaque ligne, sans aucune lacune.
Les numéros renvoyées par la fonction de DENSE_RANK ne pas avoir des lacunes et ont toujours rangs consécutifs.
La fonction de RANK ne renvoie pas toujours entières consécutives

LEAVE A REPLY

Please enter your comment!
Please enter your name here