Mysql
 sql >> Database >  >> RDS >> Mysql

Numerazione GROUP_CONCAT

Anni dopo, dovremmo abbandonare le variabili mutanti all'interno di un select istruzione, poiché da MySQL 8 possiamo usare il modo standard, con funzioni di finestra:

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

Vedi db-fiddle

Risposta originale (2016)

Puoi farlo dal lato dell'applicazione, ma in MySQL 5.7 è possibile. Nella seguente query, presumo che tu raggruppi i nomi in base a qualcosa, ad esempio il loro dipartimento (l'ho chiamato dep ). Questo per illustrare che il contatore parte da 1 per ogni nuovo gruppo.

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;

Vedi fiddle SQL o db-fiddle .

Assicurati di inserire il nome della tua tabella in from clausola e per utilizzare il campo effettivo in base al quale si desidera raggruppare. Se hai più campi in base a cui raggruppare, l'espressione assegnata a @i dovrà cambiare. Potresti ad esempio concatenare i valori che definiscono un gruppo.

Usando un separatore di due caratteri ti assicuri di avere uno spazio tra ogni nome.