Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Đánh số GROUP_CONCAT

Nhiều năm sau, chúng ta nên loại bỏ các biến đột biến bên trong select , vì kể từ MySQL 8, chúng ta có thể sử dụng theo cách tiêu chuẩn, với các hàm cửa sổ:

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

Xem db-fiddle

Câu trả lời gốc (2016)

Bạn có thể làm điều này ở phía ứng dụng, nhưng trong MySQL 5.7 thì hoàn toàn có thể. Trong truy vấn sau, tôi giả sử bạn nhóm các tên theo thứ gì đó, chẳng hạn như bộ phận của họ (tôi gọi nó là dep ). Điều này để minh họa rằng bộ đếm bắt đầu từ 1 cho mọi nhóm mới.

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;

Xem SQL fiddle hoặc db-fiddle .

Đảm bảo đặt tên bảng của bạn trong from và để sử dụng trường thực tế mà bạn muốn nhóm theo. Nếu bạn có nhiều trường để nhóm theo, biểu thức được chỉ định cho @i sẽ cần phải thay đổi. Ví dụ, bạn có thể nối các giá trị xác định một nhóm.

Bằng cách sử dụng dấu phân tách hai ký tự, bạn đảm bảo có khoảng cách giữa mỗi tên.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xuất bảng mysql sang tệp .txt hoặc .doc bằng PHP

  2. Làm thế nào để thay đổi đối chiếu mặc định của một bảng?

  3. Kích hoạt cuộc gọi trong xóa theo tầng

  4. MySQL hiển thị số 0 cho các ngày không có bản ghi

  5. mysql - trả về cột đầu tiên một lần và tất cả dữ liệu cột tương ứng