sql >> Databáze >  >> RDS >> Mysql

MySQL:VYBERTE vítěze a vraťte jejich hodnost

Myslím, že to přinese požadovaný výsledek. Všimněte si, že i správně řeší případy, kdy je cílový vítěz nerozhodný o body s jiným vítězem. (Oba zaujmou stejnou pozici).

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

Upravit :
Chci "zapojit" Ignacio Vazquez-Abrams ' odpověď, která je v několika ohledech lepší než výše uvedená.
Například umožňuje uvést všechny (nebo několik) vítězů a jejich aktuální pozici.
Další výhodou je, že umožňuje vyjádřit složitější podmínku k označení, že daný hráč je před jiným (viz níže). Čtení incrediman Komentář uživatele v tom smyslu, že nebudou existovat žádné „vazby“, mě přiměl, abych se na to podíval; dotaz lze mírně upravit následovně, aby se vyřešila situace, kdy hráči mají stejný počet bodů (takovým hráčům by dříve byla přidělena stejná hodnota pozice, nyní je hodnota pozice dále svázána s jejich relativními počátečními hodnotami).

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. Duplikujte záznam v MySQL

  2. Získání přesného času provedení příkazu MySQL

  3. Jak zvýšit vyrovnávací paměť dbms_output?

  4. Jak nejprve použít kód MySql a Entity Framework 4.1