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

Cập nhật bảng MySQL với thứ hạng kỷ lục trong các nhóm

update winners
set rank = (
    select count(score) + 1
    from winners w2
    where w2.category_id = winners.category_id and w2.score > winners.score
)

count(*) sẽ đánh giá bằng 0 ngay cả khi không có hàng nào phù hợp với điều kiện, tức là xếp hạng cao nhất. Nếu bạn muốn có một thứ hạng dày đặc, bạn có thể làm điều này:

update winners
set rank = (
    select count(distinct score) + 1
    from winners w2
    where w2.category_id = winners.category_id and w2.score > winners.score
)

CHỈNH SỬA:Theo nhận xét của bạn, tôi đã tìm thấy một truy vấn hoạt động. (Nó hoạt động trên SQL Server và tôi không quen với các điều kỳ quặc của MySQL.) http:// sqlfiddle.com/#!9/1159f/1

update winners
inner join (
    select w.id, w.category_id, count(w2.score) + 1 rank
    from winners w left outer join winners w2
        on w2.category_id = w.category_id and w2.score > w.score
    group by w.id
) r
    on r.id = winners.id
set winners.rank = r.rank



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để chỉ trích xuất các cột có giá trị khác 0 trong mysql và php?

  2. Mysql:Làm thế nào để chọn các nhóm có các giá trị nhất định?

  3. Tệp my.cnf của MySQL 5.7 ở đâu?

  4. Tạo GeoJson trong php từ MySql để sử dụng với API MapBox javascript

  5. Tính tổng một cột được phân tách bằng dấu phẩy trong MySQL 4 (không phải 5)