Wiele lat później powinniśmy zrezygnować z mutowania zmiennych w select
oświadczenie, ponieważ od MySQL 8 możemy używać standardowego sposobu, z funkcjami okna:
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
Zobacz db-fiddle
Oryginalna odpowiedź (2016)
Możesz to zrobić po stronie aplikacji, ale w MySQL 5.7 jest to możliwe. W poniższym zapytaniu zakładam, że grupujesz nazwy według czegoś, na przykład ich działu (nazwałem to dep ). Ma to na celu zilustrowanie, że licznik zaczyna się od 1 dla każdej nowej grupy.
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;
Zobacz Skrzypce SQL lub db-fiddle .
Pamiętaj, aby umieścić nazwę tabeli w from
klauzuli i użyć rzeczywistego pola, według którego chcesz pogrupować. Jeśli masz wiele pól do grupowania, wyrażenie przypisane do @i będzie musiał się zmienić. Możesz na przykład połączyć wartości, które definiują grupę.
Używając separatora dwóch znaków, zapewniasz spację między każdą nazwą.