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>
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>
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!