Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL:WYBIERZ zwycięzcę, zwracając jego rangę

Myślę, że to przyniesie ci pożądany rezultat. Zwróć uwagę, że właściwie radzę sobie z przypadkami, w których wybrany zwycięzca jest remisowy pod względem punktów z innym zwycięzcą. (Oboje otrzymują tę samą pozycję).

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

Edytuj :
Chcę „podłączyć” Ignacio Vazquez-Abrams ' odpowiedź, która pod wieloma względami jest lepsza od powyższej.
Na przykład pozwala na wymienienie wszystkich (lub kilku) zwycięzców i ich aktualnej pozycji.
Kolejną zaletą jest to, że umożliwia wyrażenie bardziej skomplikowanego warunku aby wskazać, że dany gracz jest przed innym (patrz niżej). Czytanie incrediman komentarz , że nie będzie "remisów" skłonił mnie do przyjrzenia się temu; zapytanie można nieznacznie zmodyfikować w następujący sposób, aby poradzić sobie z sytuacją, w której gracze mają taką samą liczbę punktów (tacy gracze wcześniej otrzymywali tę samą wartość pozycji, teraz wartość pozycji jest dalej powiązana z ich względnymi wartościami początkowymi).

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. Jak wdrożyć MySQL na Ubuntu i w pełni zarządzany?

  2. Jak stworzyć bloga w bazie PHP i MySQL - Admin Posts

  3. Pisanie Dataframe Pandas do MySQL

  4. Podwójny mistrz MySQL

  5. Czy można użyć zmiennej zdefiniowanej przez użytkownika MySql w .NET MySqlCommand?