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

MySQL - Nhận bộ đếm cho từng giá trị trùng lặp

Thật không may, MySQL không có các chức năng cửa sổ, đó là những gì bạn sẽ cần. Vì vậy, bạn sẽ phải sử dụng một cái gì đó như thế này:

Truy vấn cuối cùng

select data, group_row_number, overall_row_num
from
(
  select data,
        @num := if(@data = `data`, @num + 1, 1) as group_row_number,
        @data := `data` as dummy, overall_row_num
  from
  (
    select data, @rn:[email protected]+1 overall_row_num
    from yourtable, (SELECT @rn:=0) r
  ) x
  order by data, overall_row_num
) x
order by overall_row_num

xem SQL Fiddle với Demo

Giải thích:

Đầu tiên, lựa chọn bên trong, điều này áp dụng một row_number giả vào tất cả các bản ghi trong bảng của bạn (Xem SQL Fiddle with Demo ):

select data, @rn:[email protected]+1 overall_row_num
from yourtable, (SELECT @rn:=0) r

Phần thứ hai của truy vấn, so sánh từng hàng trong bảng của bạn với hàng tiếp theo để xem nó có cùng giá trị hay không, nếu không thì hãy bắt đầu group_row_number over (xem SQL Fiddle with Demo ):

select data,
      @num := if(@data = `data`, @num + 1, 1) as group_row_number,
      @data := `data` as dummy, overall_row_num
from
(
  select data, @rn:[email protected]+1 overall_row_num
  from yourtable, (SELECT @rn:=0) r
) x
order by data, overall_row_num

Lựa chọn cuối cùng, trả về các giá trị bạn muốn và đặt chúng trở lại theo thứ tự bạn yêu cầu:

select data, group_row_number, overall_row_num
from
(
  select data,
        @num := if(@data = `data`, @num + 1, 1) as group_row_number,
        @data := `data` as dummy, overall_row_num
  from
  (
    select data, @rn:[email protected]+1 overall_row_num
    from yourtable, (SELECT @rn:=0) r
  ) x
  order by data, overall_row_num
) x
order by overall_row_num


  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ập nhật MySQL mà không chỉ định tên cột

  2. Chèn biến $ hoặc giá trị $ _POST vào bảng mysql

  3. Tự động đóng kết nối db trong php?

  4. Cách xóa các hàng trùng lặp và cập nhật bảng

  5. Django ORM có thể thực hiện ORDER BY trên một giá trị cụ thể của một cột không?