Jaren later moeten we muterende variabelen in een select
. opgeven statement, aangezien we sinds MySQL 8 de standaard manier kunnen gebruiken, met vensterfuncties:
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
Zie db-fiddle
Oorspronkelijk antwoord (2016)
Je kunt dit aan de applicatiekant doen, maar in MySQL 5.7 is het mogelijk. In de volgende query neem ik aan dat je de namen op iets groepeert, bijvoorbeeld hun afdeling (ik noemde het dep ). Dit om te illustreren dat de teller voor elke nieuwe groep bij 1 begint.
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;
Zorg ervoor dat u uw tabelnaam in de from
. zet clausule en om het werkelijke veld te gebruiken waarop u wilt groeperen. Als u meerdere velden heeft om op te groeperen, de uitdrukking die is toegewezen aan @i zal moeten veranderen. U kunt bijvoorbeeld de waarden samenvoegen die een groep definiëren.
Door een scheidingsteken van twee tekens te gebruiken, zorgt u voor een spatie tussen elke naam.