År senere bør vi opgive muterende variabler i en select
sætning, da vi siden MySQL 8 kan bruge standardmåden med vinduesfunktioner:
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)
Det kan du gøre på applikationssiden, men i MySQL 5.7 er det muligt. I den følgende forespørgsel antager jeg, at du grupperer navnene efter noget, for eksempel deres afdeling (jeg kaldte det dep ). Dette for at illustrere, at tælleren starter fra 1 for hver ny gruppe.
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 SQL violin eller db-fiddle .
Sørg for at indtaste dit tabelnavn i from
klausul, og for at bruge det faktiske felt, du vil gruppere efter. Hvis du har flere felter at gruppere efter, er udtrykket tildelt @i bliver nødt til at ændre sig. Du kan for eksempel sammenkæde de værdier, der definerer en gruppe.
Ved at bruge en separator på to tegn sikrer du, at der er et mellemrum mellem hvert navn.