Maison > base de données > tutoriel mysql > Comment générer des numéros de ligne au sein de groupes dans MySQL ?

Comment générer des numéros de ligne au sein de groupes dans MySQL ?

DDD
Libérer: 2024-11-11 17:45:02
original
1055 Les gens l'ont consulté

How to Generate Row Numbers Within Groups in MySQL?

Numéro de ligne dans les groupes dans MySQL

Problème :

Produire une requête MySQL pour générer un numéro de ligne pour chaque groupe d'enregistrements basés sur deux champs, tels que crew_id et type. Le numéro de ligne doit être réinitialisé pour chaque nouvelle combinaison de crew_id et de type.

Exemples de données :

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

Sortie souhaitée :

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

Solution :

Pour obtenir les numéros de ligne souhaités, nous pouvons utiliser une combinaison d'une sous-requête et d'une instruction CASE :

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

Dans cette requête :

  • La sous-requête (SELECT @curRow := 0, @curType := '') r initialise deux variables définies par l'utilisateur : @curRow à 0 et @curType à une chaîne vide.
  • L'instruction CASE dans la requête SELECT externe compare la colonne de type avec @curType pour déterminer si la ligne actuelle appartient au même groupe.

    • Si le type est égal à @curType, @curRow est incrémenté de 1.
    • Si le type diffère de @curType, @curRow est réinitialisé à 1 et @curType est mis à jour avec la valeur de type actuelle.
  • La valeur calculée est ensuite ajoutée à 1 pour produire le numéro de ligne.
  • L'ensemble de résultats est classé par crew_id et saisi par ordre croissant.

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 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal