Tôi nghĩ rằng điều này sẽ giúp bạn có được kết quả mong muốn. Lưu ý rằng tôi xử lý đúng các trường hợp trong đó người chiến thắng được nhắm mục tiêu bị ràng buộc về điểm với người chiến thắng khác. (Cả hai đều nhận được cùng một vị trí).
SELECT COUNT(*) + 1 AS Position
FROM myTable
WHERE Points > (SELECT Points FROM myTable WHERE Winner = 'Sally')
Chỉnh sửa :
Tôi muốn "cắm" Ignacio Vazquez-Abrams 'câu trả lời, theo một số cách, tốt hơn câu trả lời trên.
Ví dụ:nó cho phép liệt kê tất cả (hoặc một số) người chiến thắng và vị trí hiện tại của họ.
Một ưu điểm khác là nó cho phép thể hiện một điều kiện phức tạp hơn để chỉ ra rằng một người chơi nhất định đang dẫn trước một người chơi khác (xem bên dưới). Đang đọc hoài nghi nhận xét của hiệu ứng rằng sẽ không có "ràng buộc" đã thúc đẩy tôi xem xét điều này; truy vấn có thể được sửa đổi một chút như sau để xử lý tình huống khi những người chơi có cùng số điểm (những người chơi như vậy trước đây sẽ được cung cấp cùng một giá trị Vị trí, bây giờ giá trị vị trí được gắn thêm với giá trị Bắt đầu tương đối của họ).
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