Maison > base de données > tutoriel mysql > Comment puis-je réaliser la fonctionnalité ROW_NUMBER () dans MySQL?

Comment puis-je réaliser la fonctionnalité ROW_NUMBER () dans MySQL?

Mary-Kate Olsen
Libérer: 2025-01-25 08:57:09
original
555 Les gens l'ont consulté

How Can I Achieve ROW_NUMBER() Functionality in MySQL?

Simulation La fonction ROW_NUMBER () dans MySQL

La fonction ROW_NUMBER () de SQL Server peut être numérotée pour l'ordre de distribution dans la partition donnée. Bien que MySQL n'ait pas de fonction complètement équivalente, il existe quelques façons d'atteindre des fonctions similaires.

Utiliser des variables pour atteindre le numéro de ligne

Dans la version MySQL avant 8,0, vous pouvez utiliser des variables pour augmenter le numéro de ligne dans la partition. La requête suivante montre cette méthode:

Cette requête est le numéro de commande de distribution de chaque ligne, et la variable @ rownum augmente dans chaque ligne.

<code class="language-sql">SELECT t.*, 
       @rownum := @rownum + 1 AS rank
  FROM YOUR_TABLE t, 
       (SELECT @rownum := 0) r</code>
Copier après la connexion
Traiter plusieurs partitions

Si la partition contient plusieurs colonnes, plusieurs variables peuvent être créées et elle est définie sur 0 lorsque la valeur de l'une des colonnes de partition change. Par exemple, appuyez sur COL1 et COL2 pour les partitions:

<:> Remarque:

MySQL 8.0 et les versions supérieures ont nativement pris en charge la fonction ROW_NUMBER (), qui fournit une méthode plus directe d'implémentation des nombres. Le code ci-dessus a été corrigé pour gérer correctement plusieurs partitions et s'assurer que le compteur de numéro de ligne est réinitialisé pendant les modifications de partition. La clause est ajoutée pour garantir la cohérence des résultats, car l'ordre de la valeur dépendante dépend de l'ordre de lecture des données.

Les déclarations ont également été ajustées pour exprimer la logique plus clairement.
<code class="language-sql">SELECT t.*, 
       @rownum_col1 := IF(@col1 = t.col1, @rownum_col1 + 1, 1) AS rank_col1,
       @rownum_col2 := IF(@col2 = t.col2, @rownum_col2 + 1, 1) AS rank_col2,
       @col1 := t.col1,
       @col2 := t.col2
  FROM YOUR_TABLE t, 
       (SELECT @rownum_col1 := 0, @rownum_col2 := 0, @col1 := '', @col2 := '') r
ORDER BY t.col1, t.col2;</code>
Copier après la connexion

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