sql >> Database >  >> RDS >> Mysql

GROUP_CONCAT nummering

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;

Zie SQL-viool of db-fiddle .

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.



  1. hoe het overeenkomstige record van toegang weer te geven op basis van een andere kolom in Datagrid in vb6

  2. Het juiste pad kiezen in een eis-instructie

  3. Een bestaande gebruiker toewijzen aan mysql-databases

  4. Kan argument niet binden aan index 2 omdat de index buiten bereik is