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

MySQL:PILIH Pemenang, mengembalikan peringkat mereka

Saya pikir ini akan memberi Anda hasil yang diinginkan. Perhatikan bahwa saya menangani kasus di mana pemenang yang ditargetkan terikat untuk poin dengan pemenang lain. (Keduanya mendapatkan posisi yang sama).

SELECT COUNT(*) + 1 AS Position
FROM myTable
WHERE Points > (SELECT Points FROM myTable WHERE Winner = 'Sally')

Sunting :
Saya ingin "memasang" Ignacio Vazquez-Abrams ' jawaban yang, dalam beberapa hal, lebih baik dari yang di atas.
Misalnya, memungkinkan daftar semua (atau beberapa) pemenang dan posisi mereka saat ini.
Keuntungan lain adalah memungkinkan mengekspresikan kondisi yang lebih rumit untuk menunjukkan bahwa pemain tertentu berada di depan yang lain (lihat di bawah). Membaca incrediman komentar yang menyatakan bahwa tidak akan ada "ikatan" mendorong saya untuk melihat ini; kueri dapat sedikit dimodifikasi sebagai berikut untuk menangani situasi ketika pemain memiliki jumlah poin yang sama (pemain tersebut sebelumnya akan diberi nilai Posisi yang sama, sekarang nilai posisi lebih lanjut terkait dengan nilai Mulai relatif mereka).

SELECT w1.name, (
  SELECT COUNT(*)
  FROM winners AS w2
  WHERE (w2.points > w1.points) 
     OR (W2.points = W1.points AND W2.Start < W1.Start)  -- Extra cond. to avoid ties.
)+1 AS rank
FROM winners AS w1
-- WHERE W1.name = 'Sally'   -- optional where clause


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySql PHP pilih jumlah nilai yang berbeda dari data yang dipisahkan koma (tag)

  2. Tidak dapat menggunakan mysql_real_escape_string

  3. C# Menggunakan parameter sql yang sekarang tidak berfungsi

  4. MySQL:Beberapa baris sebagai baris tunggal yang dipisahkan koma

  5. Bagaimana mengatasi peringatan mysql:InnoDB:page_cleaner:1000ms loop yang dimaksudkan membutuhkan XXX ms. Pengaturan mungkin tidak optimal?