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

MySQL - chọn thứ hạng cho người dùng trong bảng điểm

Mặc dù tôi không chắc "có vấn đề" nghĩa là gì trong ngữ cảnh này, nhưng đây là truy vấn được viết lại dưới dạng LEFT JOIN đơn giản với một truy vấn con chỉ để có được thứ hạng ngay ở cuối (ORDER BY cần phải được thực hiện trước khi xếp hạng);

SELECT user_id, score, @rank := @rank + 1 AS rank FROM
(
  SELECT u.user_id, u.score
  FROM user_score u
  LEFT JOIN user_score u2
    ON u.user_id=u2.user_id
   AND u.`timestamp` < u2.`timestamp`
  WHERE u2.`timestamp` IS NULL
  ORDER BY u.score DESC
) zz, (SELECT @rank := 0) z;

SQLfiddle để kiểm tra .

CHỈNH SỬA:Để tính đến group_id, bạn sẽ cần mở rộng truy vấn một chút;

SELECT user_id, score, @rank := @rank + 1 AS rank FROM
(
  SELECT u.user_id, u.score
  FROM user_score u
  LEFT JOIN user_score u2
    ON u.user_id=u2.user_id
   AND u.group_id = u2.group_id       -- u and u2 have the same group
   AND u.`timestamp` < u2.`timestamp`
  WHERE u2.`timestamp` IS NULL
    AND u.group_id = 1                -- ...and that group is group 1
  ORDER BY u.score DESC
) zz, (SELECT @rank := 0) z;

SQLfiddle khác .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cakephp sử dụng các thành phần làm phương thức điều khiển

  2. E_WARNING:Lỗi khi gửi gói STMT_PREPARE. PID =*

  3. Lỗi truy vấn Mysql - Thêm tiền tự động

  4. Di chuyển db Laravel - lỗi đổi tênColumn - Đã yêu cầu loại cơ sở dữ liệu không xác định

  5. Di chuyển Cơ sở dữ liệu MySQL từ Amazon RDS sang DigitalOcean