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

Cách thêm vị trí xếp hạng vào hàng với DENSE_RANK () trong SQL

Vấn đề:

Bạn muốn thêm vị trí xếp hạng cho các hàng liên tiếp, ngay cả khi các hàng có cùng giá trị.

Ví dụ:

Cơ sở dữ liệu của chúng tôi có một bảng có tên là competition với dữ liệu trong các cột sau:id (khóa chính), first_name , last_namescore .

id first_name last_name điểm
11 John Thomas 345
14 Mary Johnson 222
16 Lisa Màu nâu 154
23 Alan Blake 222
32 Chris Taylor 154

Hãy hiển thị tất cả thông tin chi tiết về học sinh:họ, tên và điểm số được sắp xếp theo score thứ tự giảm dần. Chúng tôi không muốn bỏ qua số vị trí nếu một số điểm giống nhau cho nhiều học sinh.

Giải pháp 1:

SELECT DENSE_RANK() OVER(ORDER BY score DESC) AS d_rank,
  first_name,
  last_name,
  score
FROM competition;

Lưu ý rằng thứ hạng nằm trong khoảng từ 1 đến 3.

Thảo luận:

Sử dụng DENSE_RANK nếu bạn không muốn bỏ qua các vị trí xếp hạng sau các hàng có cùng thứ hạng. Trong ví dụ của chúng tôi, mặc dù Mary và Alan có cùng thứ hạng là 2, nhưng vị trí của Lisa là 3.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 cách để chọn hàng phù hợp với tất cả các mục trong một danh sách (T-SQL)

  2. Các cột chỉ mục mới nên nằm trong khóa, hay được bao gồm?

  3. Cách kết nối SalesForce làm nguồn dữ liệu trong Pyramid

  4. Rethink Flask - Một danh sách Todo đơn giản được hỗ trợ bởi Flask và RethinkDB

  5. Mối quan hệ một-một trong cơ sở dữ liệu là gì?