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