Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Perbarui tabel MySQL dengan peringkat rekor dalam grup

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

count(*) akan mengevaluasi ke nol bahkan ketika tidak ada baris yang cocok dengan kondisi, yaitu peringkat teratas. Jika Anda menginginkan peringkat yang padat, Anda dapat melakukan ini:

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

EDIT:Per komentar Anda, saya telah menemukan kueri yang berfungsi. (Ini bekerja pada SQL Server dan saya tidak terbiasa dengan kebiasaan 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. Mengakhiri koneksi mysql yang menganggur

  2. Cara Mencadangkan / Mengekspor Database MySQL menggunakan PHP

  3. Fungsi MySQL SIGN() – Cari Tahu Apakah Angka Positif atau Negatif di MySQL

  4. Cara menggabungkan dua kueri SQL dengan klausa ORDER BY yang berbeda

  5. SQL SERVER – Trik – Menjalankan SSMS Dengan Akun Windows yang Berbeda