Fonction de fenêtre de numéro de ligne MySQL

Mysql Row Number Window Function



Dans MySQL, une méthode ROW NUMBER() contient un numéro chronologique pour chaque ligne à l'intérieur de la partition. C'est juste une fonction de fenêtre quelconque. Le nombre de lignes commence à 1 avec le nombre de lignes dans la partition. N'oubliez pas qu'avant la version 8.0, MySQL n'autorisait pas la fonction ROW NUMBER(), cependant, il propose une variable de session qui permet d'imiter cette fonctionnalité. Nous en comprendrons plus sur la fonctionnalité MySQL ROW NUMBER() tout au long de ce guide et produirons un numéro consécutif pour chaque ligne de la collection de résultats. Dans MySQL, les méthodes ROW_NUMBER() sont utilisées avec les clauses suivantes :

  • La clause Over() sera utilisée à l'intérieur.
  • La clause ORDERS BY organise le résultat selon l'ordre de tri de la colonne mentionnée.

Syntaxe:

>> SÉLECTIONNER col_name,ROW_NUMBER()PLUS DE( CLOISON PAR col_name, COMMANDÉ PAR col_name) COMME num_ligne DE nom de la table;

Ouvrons le shell client de ligne de commande MySQL à partir des applications et tapez le mot de passe pour vous connecter.









Vous devez créer une nouvelle table ou utiliser la table par défaut pour commencer à travailler sur la fonction de numéro de ligne. Comme présenté dans l'image ci-dessous, nous avons une table animaux dans les données du schéma avec quelques enregistrements. Récupérons ses enregistrements à l'aide de l'instruction SELECT.



>> SÉLECTIONNER * DE Les données .animaux;





Exemple 01 : ROW_NUMBER() Utilisation de la clause ORDER BY

Nous utiliserons le même tableau pour développer quelques exemples de la fonction de numéro de ligne. Nous prenons un exemple de la fonction ROW_NUMBER() suivie de Over(), en utilisant uniquement la clause ORDER BY. Nous avons récupéré tous les enregistrements en numérotant les lignes en fonction de la colonne Ordre des prix. Nous avons donné le nom row_num à une colonne, qui stockera les numéros de la ligne. Essayons la commande ci-dessous pour le faire.

>> SÉLECTIONNER *,ROW_NUMBER()PLUS DE( COMMANDÉ PAR Prix) COMME num_ligne DE Les données .animaux;

Lors de l'exécution de la requête ci-dessus, nous pouvons voir que les lignes ont été affectées de numéros selon l'ordre de tri de la colonne Prix. Vous pourriez penser que certains prix plus petits devraient figurer en haut de la colonne et qu'ils devraient être triés en fonction de cela. Mais la clause ORDER BY ne voit que le premier chiffre ou alphabet de la colonne pour trier les valeurs.



Exécutons la même requête suivie de la clause ORDER BY en utilisant l'ordre de tri de la colonne Age. La sortie sera donnée en fonction de la colonne Age.

>> SÉLECTIONNER *,ROW_NUMBER()PLUS DE( COMMANDÉ PAR Âge) COMME num_ligne DE Les données .animaux;

Exemple 02 : ROW_NUMBER() Utilisation de la clause PARTITION BY

Nous utiliserons la seule clause PARTITION BY dans la requête ROW_NUMBER() pour vérifier les résultats. Nous avons utilisé la requête SELECT pour récupérer les enregistrements suivis de ROW_NUMBER() et de la clause OVER, tout en partitionnant la table en fonction de la colonne Color. Exécutez la commande ci-dessous dans le shell de commande.

>> SÉLECTIONNER *,ROW_NUMBER()PLUS DE( CLOISON PAR Couleur) COMME num_ligne DE Les données .animaux;

Vous pouvez voir dans le résultat que la numérotation des lignes a été attribuée dans les partitions, selon l'ordre de tri des couleurs. Comme nous avons 4 valeurs pour la couleur Noir qui prend 4 lignes. C'est pourquoi il a des nombres à quatre rangées commençant de 1 à 4 et vice versa.

Essayez le même exemple, partitionné par la colonne Sexe cette fois. Comme nous le savons, nous n'avons que deux genres dans ce tableau, c'est pourquoi 2 partitions seront formées. Les femmes occupent 9 lignes, c'est pourquoi il a une numérotation de 1 à 9. Alors que les hommes ont 8 valeurs, c'est pourquoi il a 1 à 8.

>> SÉLECTIONNER *,ROW_NUMBER()PLUS DE( CLOISON PAR Sexe) COMME num_ligne DE Les données .animaux;

Exemple 03 : ROW_NUMBER() Utilisation de PARTITION BY & ORDER BY

Nous avons fait les deux exemples ci-dessus dans la ligne de commande MySQL, il est maintenant temps de faire l'exemple ROW_NUMBER() dans MySQL Workbench 8.0. Alors, ouvrez MySQL Workbench 8.0 à partir des applications. Connectez MySQL Workbench à la base de données racine de l'hôte local pour commencer à travailler.

Sur le côté gauche de MySQL Workbench, vous trouverez la barre de schéma, soufflez le navigateur. Dans cette barre de schéma, vous trouverez la liste des bases de données. Sous la liste des bases de données, vous aurez différentes tables et procédures stockées, comme vous pouvez le voir dans l'image ci-dessous. Nous avons différentes tables dans notre base de données « données ». Nous allons ouvrir la table 'order1' à l'aide de la commande SELECT dans la zone de requête pour commencer à l'utiliser pour l'implémentation de la fonction ROW_NUMBER().

>> SÉLECTIONNER * DE Les données .order1;

La table order1 a été affichée dans la vue en grille comme indiqué ci-dessous. Vous pouvez voir qu'il a 4 champs de colonne, id, Region, Status et OrderNo. Nous allons récupérer tous les enregistrements de cette table en utilisant les clauses ORDER BY et PARTITION BY, les deux en même temps.

Dans la zone de requête de MySQL Workbench 8.0, saisissez la requête ci-dessous. La requête a été lancée avec la clause SELECT, récupérant tous les enregistrements suivis de la fonction ROW_NUMBER() avec la clause OVER. Après la clause OVER, nous avons spécifié la colonne Status précédée de l'instruction PARTITION BY pour diviser la table en partitions selon cette table. La clause ORDER BY a été utilisée pour ranger le tableau de manière décroissante selon la colonne Region. Les numéros de ligne seront conservés dans la colonne row_num. Appuyez sur l'icône flash pour exécuter cette commande.

Le résultat affiché ci-dessous sera affiché. Tout d'abord, le tableau a été séparé en deux parties selon les valeurs de la colonne Statut. Après cela, il a été présenté dans l'ordre décroissant de la colonne « Région » et les partitions ont été attribuées avec les numéros de ligne.

Conclusion:

Enfin, nous avons terminé tous les exemples nécessaires en utilisant la fonction ROW_NUMBER() dans MySQL Workbench et MySQL Command-line Client Shell.