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.