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

Peringkat Pembaruan MySQL Sederhana dengan Ties

Inilah solusi alternatif:jangan simpan peringkat sama sekali! :-)

Anda dapat menghitungnya dengan cepat.

Contoh:

SELECT id, (@next_rank := IF(@score <> score, 1, 0)) nr, 
           (@score := score) score, (@r := IF(@next_rank = 1, @r + 1, @r)) rank 
FROM rank, (SELECT @r := 0) dummy1
ORDER BY score DESC;

Hasil:

  +------+----+-------+------+
  | id   | nr | score | rank |
  +------+----+-------+------+
  |    2 |  1 |    23 |    1 |
  |    4 |  1 |    17 |    2 |
  |    1 |  0 |    17 |    2 |
  |    5 |  1 |    10 |    3 |
  |    3 |  1 |     2 |    4 |
  +------+----+-------+------+

nr di sini adalah kolom tambahan yang menunjukkan apakah kita harus menetapkan peringkat berikutnya atau tidak.

Anda dapat membungkus kueri ini dengan select lainnya dan melakukan paging, misalnya.

SELECT id, score, rank 
FROM (SELECT id, (@next_rank := IF(@score <> score, 1, 0)) nr, 
           (@score := score) score, (@r := IF(@next_rank = 1, @r + 1, @r)) rank
      FROM rank, (SELECT @r := 0) dummy1
      ORDER BY score DESC) t
      WHERE rank > 1 and rank < 3;

Hasil:

  +------+-------+------+
  | id   | score | rank |
  +------+-------+------+
  |    4 |    17 |    2 |
  |    1 |    17 |    2 |
  +------+-------+------+

PERHATIAN :sejak sekarang rank adalah kolom yang dihitung, Anda tidak dapat mengindeksnya dan secara efisien membuka halaman jauh ke dalam kumpulan data (yaitu, "pilih catatan dengan peringkat dari 3000 hingga 3010"). Tapi itu masih bagus untuk "pilih peringkat N teratas" (asalkan Anda memasukkan LIMIT yang sesuai pada kueri)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengaktifkan log kueri lambat di MySQL

  2. Gabung tabel dalam dua database menggunakan SQLAlchemy

  3. MySQL &set bersarang:GABUNG lambat (tidak menggunakan indeks)

  4. Cara Menyisipkan Beberapa Baris dalam Satu SQL Query – Pertanyaan Wawancara Minggu Ini #069

  5. Kode Kesalahan:1406. Data terlalu panjang untuk kolom - MySQL