SQL RANK() et ROW_NUMBER() : explication détaillée des différences
En SQL, RANK() et ROW_NUMBER() ont des fonctions similaires et se confondent facilement. Cependant, comprendre leurs différences subtiles est essentiel pour une manipulation efficace des données.
Comparaison de RANK() et ROW_NUMBER()
RANK() attribue le même rang aux lignes et aux colonnes avec la même valeur de tri au sein d'une partition, tandis que ROW_NUMBER() incrémente toujours, même pour les lignes et les colonnes avec la même valeur.
Différence clé : gestion des valeurs en double
La principale différence entre RANK() et ROW_NUMBER() est leur comportement lorsqu'ils rencontrent des valeurs en double au sein d'une partition :
Exemple
Considérez la forme suivante :
StyleID | ID | Description |
---|---|---|
1 | 1 | Item A |
1 | 1 | Item B |
1 | 1 | Item C |
1 | 2 | Item D |
Utilisez la requête suivante :
<code class="language-sql">SELECT ID, Description, RANK() OVER (PARTITION BY StyleID ORDER BY ID) AS 'Rank' FROM SubStyle; SELECT ID, Description, ROW_NUMBER() OVER (PARTITION BY StyleID ORDER BY ID) AS 'RowNumber' FROM SubStyle;</code>
Le même résultat ne peut être obtenu que s'il n'y a pas de valeurs en double dans la partition. Par exemple, si vous ajoutez une autre ligne avec StyleID 3 et ID 1, vous observerez ce qui suit :
StyleID | ID | Description | Rank | RowNumber |
---|---|---|---|---|
1 | 1 | Item A | 1 | 1 |
1 | 1 | Item B | 1 | 2 |
1 | 1 | Item C | 1 | 3 |
1 | 2 | Item D | 4 | 4 |
3 | 1 | New Item | 1 | 5 |
Comme vous pouvez le voir, pour une valeur unique avec StyleID de 3, ROW_NUMBER() attribue un nombre croissant, tandis que RANK() lui attribue le même rang qu'une ligne avec une valeur en double de StyleID de 1.
Conclusion
RANK() et ROW_NUMBER() servent à des fins différentes. RANK() est utilisé pour classer les valeurs uniques au sein d'un groupe, en gérant les valeurs en double de manière appropriée. ROW_NUMBER(), en revanche, incrémente toujours, garantissant que chaque ligne a une valeur numérique distincte, même pour les lignes avec des valeurs en double. Comprendre ces différences est essentiel pour prendre des décisions éclairées lorsque vous travaillez avec des données SQL.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!