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

Cách tính thứ hạng trong MySQL

Đôi khi bạn cần phải tính toán thứ hạng trong MySQL. Bạn có thể sắp xếp theo số hoặc văn bản nhưng không thể tính toán xếp hạng trong MySQL một cách dễ dàng. Đây là một truy vấn bạn có thể sử dụng. Chỉ cần thay thế tên bảng điểm số và tên cột id, điểm số.

Tính toán xếp hạng trong MySQL dựa trên giá trị ngày càng tăng

Ví dụ:

CREATE TABLE score (id int, score int);
INSERT INTO scores VALUES (1, 35),(2, 10),(3,30),(4,22),(5,20),(6,18),(7,36);
Scores:
+----+------+
| id | score|
+----+------+
| 1  |   35 |
| 2  |   10 |
| 3  |   30 |
| 4  |   22 |
| 5  |   20 |
| 6  |   18 |
| 7  |   36 |
+----+------+

Chúng tôi sử dụng một biến xếp hạng, chẳng hạn như sau:

SELECT    id,score,
          @curRank := @curRank + 1 AS rank
FROM      scores p, (SELECT @curRank := 0) r
ORDER BY  score;

(SELECT @curRank := 0)

phần cho phép khởi tạo biến mà không yêu cầu lệnh SET riêng biệt.

Result:
+----+------+------+
| id | score| rank |
+----+------+------+
| 2  |   10 |    1 |
| 6  |   18 |    2 |
| 5  |   20 |    3 |
| 4  |   22 |    4 |
| 3  |   30 |    5 |
| 1  |   35 |    6 |
| 7  |   36 |    7 |
+----+------+------+
7 rows in set (0.02 sec)

Tính thứ hạng trong MySQL dựa trên giá trị giảm dần

Nếu bạn muốn tính xếp hạng trong MySQL dựa trên thứ tự giảm dần của điểm số, chỉ cần thêm từ khóa DESC vào truy vấn.

SELECT    id,score,
          @curRank := @curRank + 1 AS rank
FROM      scores p, (SELECT @curRank := 0) r
ORDER BY  score DESC;

Kết quả:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CHÈN BỎ QUA so với CHÈN ... TRÊN CẬP NHẬT KHÓA DUPLICATE

  2. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Lỗi liên kết truyền thông

  3. '0000-00-00 00:00:00' không thể được biểu thị dưới dạng java.sql. Lỗi dấu thời gian

  4. CẬP NHẬT nhiều bảng trong MySQL bằng LEFT JOIN

  5. HAProxy:Tất cả các tài nguyên của Somenines