Maison > Article > base de données > Comment générer des numéros de ligne au sein de 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
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
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;
Dans cette requête :
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.
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!