sql >> Databáze >  >> RDS >> Mysql

Číslování GROUP_CONCAT

O několik let později bychom měli opustit mutující proměnné uvnitř select příkazem, protože od MySQL 8 můžeme používat standardní způsob s funkcemi okna:

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

Viz db-fiddle

Původní odpověď (2016)

Můžete to udělat na straně aplikace, ale v MySQL 5.7 je to možné. V následujícím dotazu předpokládám, že názvy seskupujete podle něčeho, například podle jejich oddělení (nazval jsem to odd ). To pro ilustraci, že počítadlo začíná od 1 pro každou novou skupinu.

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;

Viz SQL housle nebo db-fiddle .

Ujistěte se, že jste do from vložili název vaší tabulky klauzule a použít skutečné pole, podle kterého chcete seskupit. Pokud máte k seskupení více polí, výraz je přiřazen k @i bude potřeba změnit. Můžete například zřetězit hodnoty, které definují skupinu.

Použitím oddělovače dvou znaků zajistíte, že mezi každým jménem bude mezera.



  1. Jedinečná modelová pole v Django nerozlišují malá a velká písmena?

  2. Získejte pouze číslice pomocí regulárního výrazu

  3. Jaké jsou výhody systému správy dat?

  4. chyba při instalaci mysqlclient pomocí pip do MacOS Bigsur