sql >> Base de Datos >  >> RDS >> Mysql

Numeración GROUP_CONCAT

Años más tarde, deberíamos abandonar la mutación de variables dentro de un select declaración, ya que desde MySQL 8 podemos usar la forma estándar, con funciones de ventana:

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

Ver db-fiddle

Respuesta original (2016)

Puede hacer esto en el lado de la aplicación, pero en MySQL 5.7 es posible. En la siguiente consulta, asumo que agrupa los nombres por algo, por ejemplo, su departamento (lo llamé dep ). Esto con el fin de ilustrar que el contador comienza desde 1 para cada nuevo grupo.

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;

Ver SQL fiddle o db-fiddle .

Asegúrese de poner el nombre de su tabla en from y usar el campo real por el que desea agrupar. Si tiene varios campos para agrupar, la expresión asignada a @i tendrá que cambiar. Por ejemplo, podría concatenar los valores que definen un grupo.

Al usar un separador de dos caracteres, se asegura de tener un espacio entre cada nombre.