sql >> Databasteknik >  >> RDS >> Mysql

GROUP_CONCAT numrering

År senare bör vi överge muterande variabler i en select uttalande, eftersom vi sedan MySQL 8 kan använda standardsättet, med fönsterfunktioner:

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)

Du kan göra detta på applikationssidan, men i MySQL 5.7 är det möjligt. I följande fråga antar jag att du grupperar namnen efter något, till exempel deras avdelning (jag kallade det dep ). Detta för att illustrera att räknaren börjar från 1 för varje ny grupp.

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-fiol eller db-fiddle .

Se till att ange ditt tabellnamn i from och för att använda det faktiska fältet du vill gruppera efter. Om du har flera fält att gruppera efter, är uttrycket tilldelat @i kommer att behöva ändras. Du kan till exempel sammanfoga de värden som definierar en grupp.

Genom att använda en avgränsare med två tecken säkerställer du att det finns ett mellanslag mellan varje namn.



  1. MYSQL-sortering med doktrin

  2. Finns det något som heter en tempfunktion?

  3. sqlldr.exe fungerar inte för Windows 10

  4. Hur man förbättrar frågeprestanda (med hjälp av förklara kommandoresultat t.ex.)