Години по-късно трябва да се откажем от мутиращите променливи в select
израз, тъй като от MySQL 8 можем да използваме стандартния начин, с прозоречни функции:
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
Вижте db-fiddle
Оригинален отговор (2016)
Можете да направите това от страна на приложението, но в MySQL 5.7 е възможно. В следващата заявка предполагам, че групирате имената по нещо, например техния отдел (нарекох го dep ). Това, за да се илюстрира, че броячът започва от 1 за всяка нова група.
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;
Вижте SQL fiddle или db-fiddle .
Уверете се, че сте поставили името на вашата таблица в from
клауза и да използвате действителното поле, по което искате да групирате. Ако имате няколко полета за групиране, изразът, присвоен на @i ще трябва да се промени. Можете например да свържете стойностите, които определят група.
Като използвате разделител от два знака, гарантирате, че има интервал между всяко име.