sql >> Database teknologi >  >> RDS >> Mysql

GROUP_CONCAT nummerering

År senere bør vi opgive muterende variabler i en select sætning, da vi siden MySQL 8 kan bruge standardmåden med vinduesfunktioner:

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

Se db-fiddle

Originalt svar (2016)

Det kan du gøre på applikationssiden, men i MySQL 5.7 er det muligt. I den følgende forespørgsel antager jeg, at du grupperer navnene efter noget, for eksempel deres afdeling (jeg kaldte det dep ). Dette for at illustrere, at tælleren starter fra 1 for hver ny gruppe.

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;
 

Se SQL violin eller db-fiddle .

Sørg for at indtaste dit tabelnavn i from klausul, og for at bruge det faktiske felt, du vil gruppere efter. Hvis du har flere felter at gruppere efter, er udtrykket tildelt @i bliver nødt til at ændre sig. Du kan for eksempel sammenkæde de værdier, der definerer en gruppe.

Ved at bruge en separator på to tegn sikrer du, at der er et mellemrum mellem hvert navn.



  1. Optimalt design til en database med tilbagevendende begivenhed

  2. MySQL udtrække klartekst fra html-data eller PHP?

  3. SQL Server 2016:Opret et login

  4. MySQL til PostgreSQL:Hvordan ændres denne SQL-forespørgsel?