Mysql
 sql >> Base de données >  >> RDS >> Mysql

Numérotation GROUP_CONCAT

Des années plus tard, nous devrions abandonner les variables mutantes à l'intérieur d'un select déclaration, comme depuis MySQL 8, nous pouvons utiliser la méthode standard, avec les fonctions de fenêtre :

with base as (
      select   dep, 
               empnam,
               count(*) over (partition by dep order by empnam) num
      from     t)
select   dep,
         group_concat(concat(num, '.', empnam) separator ', ') emps
from     base
group by dep

Voir db-fiddle

Réponse originale (2016)

Vous pouvez le faire du côté de l'application, mais dans MySQL 5.7, c'est possible. Dans la requête suivante, je suppose que vous regroupez les noms par quelque chose, par exemple leur département (je l'ai appelé dep ). Ceci afin d'illustrer que le compteur commence à partir de 1 pour chaque nouveau groupe.

select   dep, 
         group_concat( 
             concat(@i := if (@grp = dep, @i + 1, if(@grp := dep,1,1)), '.', empnam) 
             separator ', ') emps
from     t,
         (select @i := 0, @grp := '') init
group by dep;

Voir violon SQL ou db-fiddle .

Assurez-vous de mettre le nom de votre table dans le from clause et d'utiliser le champ réel par lequel vous souhaitez effectuer le regroupement. Si vous avez plusieurs champs à regrouper, l'expression attribuée à @i devra changer. Vous pouvez par exemple concaténer les valeurs qui définissent un groupe.

En utilisant un séparateur de deux caractères vous vous assurez d'avoir un espace entre chaque nom.