Anos depois, devemos abandonar variáveis mutantes dentro de um
select
declaração, pois desde o MySQL 8 podemos usar a maneira padrão, com funções de janela: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
Consulte db-fiddle
Resposta original (2016)
Você pode fazer isso no lado do aplicativo, mas no MySQL 5.7 é possível. Na consulta a seguir, suponho que você agrupe os nomes por algo, por exemplo, seu departamento (chamei dep ). Isso para ilustrar que o contador começa em 1 para cada novo 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;
Consulte violino SQL ou db-fiddle .
Certifique-se de colocar o nome da sua tabela no
from
cláusula e para usar o campo real pelo qual você deseja agrupar. Se você tiver vários campos para agrupar, a expressão atribuída a @i precisará mudar. Você pode, por exemplo, concatenar os valores que definem um grupo. Ao usar um separador de dois caracteres, você garante um espaço entre cada nome.