Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL:CHỌN người chiến thắng, trả về thứ hạng của họ

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Số lượng cột không khớp với số lượng giá trị ở hàng 1

  2. Lỗi MySQL:Sắp xếp bị hủy bỏ

  3. ColumnNotFound vấn đề với Magic trong trò chơi scala

  4. Tôi không thể tìm ra cách cập nhật thời gian đăng nhập cuối cùng của mình

  5. Sử dụng SSL để kết nối với mySQL từ PHP