År senare bör vi överge muterande variabler i en select
uttalande, eftersom vi sedan MySQL 8 kan använda standardsättet, med fönsterfunktioner:
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
Se db-fiddle
Originalt svar (2016)
Du kan göra detta på applikationssidan, men i MySQL 5.7 är det möjligt. I följande fråga antar jag att du grupperar namnen efter något, till exempel deras avdelning (jag kallade det dep ). Detta för att illustrera att räknaren börjar från 1 för varje ny grupp.
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;
Se till att ange ditt tabellnamn i from
och för att använda det faktiska fältet du vill gruppera efter. Om du har flera fält att gruppera efter, är uttrycket tilldelat @i kommer att behöva ändras. Du kan till exempel sammanfoga de värden som definierar en grupp.
Genom att använda en avgränsare med två tecken säkerställer du att det finns ett mellanslag mellan varje namn.