Mysql
 sql >> база данни >  >> RDS >> Mysql

GROUP_CONCAT номериране

Години по-късно трябва да се откажем от мутиращите променливи в select израз, тъй като от MySQL 8 можем да използваме стандартния начин, с прозоречни функции:

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

Вижте db-fiddle

Оригинален отговор (2016)

Можете да направите това от страна на приложението, но в MySQL 5.7 е възможно. В следващата заявка предполагам, че групирате имената по нещо, например техния отдел (нарекох го dep ). Това, за да се илюстрира, че броячът започва от 1 за всяка нова група.

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;

Вижте SQL fiddle или db-fiddle .

Уверете се, че сте поставили името на вашата таблица в from клауза и да използвате действителното поле, по което искате да групирате. Ако имате няколко полета за групиране, изразът, присвоен на @i ще трябва да се промени. Можете например да свържете стойностите, които определят група.

Като използвате разделител от два знака, гарантирате, че има интервал между всяко име.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysqldump - Експортирайте структура само без автоматично инкремент

  2. Magento:Съвети за архивиране

  3. Как да замените NULL стойност от обобщена заявка с помощта на модул MySQLdb в python?

  4. Релационно разделение в mysql без агрегатни функции?

  5. Избиране срещу подмножества на списък в MySQL