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

cách cung cấp cùng một số sê-ri cho nhóm bản ghi trong mysql

Các nhóm của bạn được xác định bằng cách bắt đầu bằng code = 100 . Đây là một chút khó khăn. Trong MySQL 8+, bạn có thể sử dụng các hàm cửa sổ để xác định các nhóm và sau đó là row_number() để gán serial_number :

select c.*, 
       row_number() over (partition by grp order by id) as serial_number
from (select c.*,
             sum( code = 100 ) over (order by id) as grp
      from carts c
     ) c;

Điều này phức tạp hơn nhiều trong các phiên bản MySQL trước đó.

Bạn có thể xác định nhóm bằng truy vấn con:

select c.*,
       (select count(*)
        from carts c2
        where c2.id <= c.id and c2.code = 100
       ) as grp
from carts c;

Sau đó, bạn có thể sử dụng các biến để có được thông tin bạn muốn:

select c.*,
       (@rn := if(@g = grp, @rn + 1,
                  if(@g := grp, 1, 1)
                 )
       ) as serial_number
from (select c.*,
             (select count(*)
              from carts c2
              where c2.id <= c.id and c2.code = 100
             ) as grp
      from carts c
      order by grp, id
     ) c cross join
     (select @g := -1, @rn := 0) params;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cú pháp DELETE của SQL - Được DBMS liệt kê

  2. Bảng dữ liệu tổng hợp

  3. SQL Auto-Increment theo DateTime

  4. xác thực và dữ liệu thêm vào bảng db

  5. MySQL:không có trong GROUP BY