Maison >base de données >tutoriel mysql >Comment numéroter les lignes par groupe dans MySQL ?

Comment numéroter les lignes par groupe dans MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-11 21:52:03436parcourir

How to Number Rows by Group in MySQL?

Numérotation des lignes par groupe dans MySQL

Considérez la structure de tableau suivante :

id crew_id amount type
1 4 1000 AUB
2 4 1500 AUB
3 5 8000 CA
4 4 1000 CA
5 5 1000 AUB
6 6 3000 AUB
7 4 2000 CA
8 6 3500 AUB
9 4 5000 AUB
10 5 9000 CA
11 5 1000 CA

Pour générer un ensemble de résultats qui comprend un numéro de ligne pour chaque combinaison de crew_id et de type, exécutez ce qui suit requête :

SELECT    id,
              crew_id,
              amount,
              type,
             ( 
                CASE type 
                WHEN @curType 
                THEN @curRow := @curRow + 1 
                ELSE @curRow := 1 AND @curType := type END
              ) + 1 AS rank
    FROM      Table1 p,
              (SELECT @curRow := 0, @curType := '') r
   ORDER BY  crew_id,type asc;

Explication :

  • La requête initialise d'abord deux variables utilisateur, @curRow et @curType, pour suivre le numéro de ligne actuel et le valeur actuelle du type, respectivement.
  • Dans la requête principale, l'instruction CASE vérifie si la valeur actuelle du type correspond à la valeur précédemment stockée dans @curType. S'ils correspondent, il incrémente @curRow de 1. Sinon, il réinitialise @curRow à 1 et met à jour @curType avec la nouvelle valeur.
  • L'expression (@curRow := @curRow 1) 1 ajoute le ou réinitialisez la valeur de @curRow de 1 pour générer le numéro de ligne.
  • La requête est classée par crew_id et tapez pour regrouper et numéroter correctement les lignes.

Sortie :

id crew_id amount type row_number
1 4 1000 AUB 1
2 4 1500 AUB 2
9 4 5000 AUB 3
4 4 1000 CA 1
7 4 2000 CA 2
5 5 1000 AUB 1
3 5 8000 CA 1
10 5 9000 CA 2
11 5 1000 CA 3
6 6 3000 AUB 1
6 6 3000 AUB 2

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!

Déclaration:
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