Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Numeração de GROUP_CONCAT


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.