Jahre später sollten wir mutierende Variablen innerhalb eines select
aufgeben -Anweisung, da wir seit MySQL 8 den Standardweg mit Fensterfunktionen verwenden können:
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
Siehe db-fiddle
Originalantwort (2016)
Sie können dies auf der Anwendungsseite tun, aber in MySQL 5.7 ist es möglich. In der folgenden Abfrage nehme ich an, dass Sie die Namen nach etwas gruppieren, zum Beispiel ihrer Abteilung (ich habe sie dep genannt ). Dies soll veranschaulichen, dass der Zähler für jede neue Gruppe bei 1 beginnt.
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;
Siehe SQL-Fiddle oder db-fiddle .
Stellen Sie sicher, dass Sie Ihren Tabellennamen in from
einfügen -Klausel und um das tatsächliche Feld zu verwenden, nach dem Sie gruppieren möchten. Wenn Sie mehrere Felder zum Gruppieren haben, der @i zugewiesene Ausdruck wird sich ändern müssen. Sie könnten zum Beispiel die Werte verketten, die eine Gruppe definieren.
Durch die Verwendung eines Trennzeichens aus zwei Zeichen stellen Sie sicher, dass zwischen jedem Namen ein Leerzeichen steht.