O několik let později bychom měli opustit mutující proměnné uvnitř select
příkazem, protože od MySQL 8 můžeme používat standardní způsob s funkcemi 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
Viz db-fiddle
Původní odpověď (2016)
Můžete to udělat na straně aplikace, ale v MySQL 5.7 je to možné. V následujícím dotazu předpokládám, že názvy seskupujete podle něčeho, například podle jejich oddělení (nazval jsem to odd ). To pro ilustraci, že počítadlo začíná od 1 pro každou novou skupinu.
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;
Viz SQL housle nebo db-fiddle .
Ujistěte se, že jste do from
vložili název vaší tabulky klauzule a použít skutečné pole, podle kterého chcete seskupit. Pokud máte k seskupení více polí, výraz je přiřazen k @i bude potřeba změnit. Můžete například zřetězit hodnoty, které definují skupinu.
Použitím oddělovače dvou znaků zajistíte, že mezi každým jménem bude mezera.