Maison > base de données > tutoriel mysql > SQL RANK() vs ROW_NUMBER() : en quoi diffèrent-ils lors de la gestion des égalités ?

SQL RANK() vs ROW_NUMBER() : en quoi diffèrent-ils lors de la gestion des égalités ?

Susan Sarandon
Libérer: 2025-01-13 16:56:43
original
896 Les gens l'ont consulté

SQL RANK() vs. ROW_NUMBER(): How Do They Differ When Handling Ties?

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 :

  • RANK() : Attribue aux lignes avec des valeurs en double le même rang.
  • ROW_NUMBER() : Attribuez arbitrairement des rangs croissants aux lignes avec des valeurs en double.

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal