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.