Mysql
 sql >> Datenbank >  >> RDS >> Mysql

GROUP_CONCAT-Nummerierung

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.