Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Numeracja GROUP_CONCAT

Wiele lat później powinniśmy zrezygnować z mutowania zmiennych w select oświadczenie, ponieważ od MySQL 8 możemy używać standardowego sposobu, z funkcjami 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

Zobacz db-fiddle

Oryginalna odpowiedź (2016)

Możesz to zrobić po stronie aplikacji, ale w MySQL 5.7 jest to możliwe. W poniższym zapytaniu zakładam, że grupujesz nazwy według czegoś, na przykład ich działu (nazwałem to dep ). Ma to na celu zilustrowanie, że licznik zaczyna się od 1 dla każdej nowej grupy.

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;

Zobacz Skrzypce SQL lub db-fiddle .

Pamiętaj, aby umieścić nazwę tabeli w from klauzuli i użyć rzeczywistego pola, według którego chcesz pogrupować. Jeśli masz wiele pól do grupowania, wyrażenie przypisane do @i będzie musiał się zmienić. Możesz na przykład połączyć wartości, które definiują grupę.

Używając separatora dwóch znaków, zapewniasz spację między każdą nazwą.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Automatyczne wstawianie znacznika czasu PHP mysql

  2. Czy można używać IF(cond1 AND cond2,result, else wynik) w MySQL?

  3. Dlaczego ten kod SQL daje błąd 1066 (Nieunikalna tabela/alias:„użytkownik”)?

  4. Błąd Pythona i mySQLdb:OperationalError:(1054, nieznana kolumna w klauzuli where)

  5. Znaki Ruby i MySQL UTF-8