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

Làm cách nào tôi có thể chọn bản ghi có mức lương cao thứ 2 trong cơ sở dữ liệu Oracle?

RANK và DENSE_RANK đã được đề xuất - tùy thuộc vào yêu cầu của bạn, bạn cũng có thể xem xét ROW_NUMBER ():

select * from (
  select e.*, row_number() over (order by sal desc) rn from emp e
)
where rn = 2;

Sự khác biệt giữa RANK (), DENSE_RANK () và ROW_NUMBER () tổng hợp thành:

  • ROW_NUMBER () luôn tạo ra một xếp hạng duy nhất; nếu mệnh đề ORDER BY không thể phân biệt giữa hai hàng, nó sẽ vẫn cung cấp cho chúng các thứ hạng khác nhau (ngẫu nhiên)
  • RANK () và DENSE_RANK () sẽ xếp hạng giống nhau cho các hàng không thể phân biệt bằng mệnh đề ORDER BY
  • DENSE_RANK () sẽ luôn tạo ra một chuỗi xếp hạng liền kề (1,2,3, ...), trong khi RANK () sẽ để lại khoảng trống sau hai hoặc nhiều hàng có cùng thứ hạng (nghĩ rằng "Thế vận hội Olympic":nếu hai vận động viên giành huy chương vàng, không có vị trí thứ hai, chỉ có vị trí thứ ba)

Vì vậy, nếu bạn chỉ muốn một nhân viên (ngay cả khi có một số nhân viên có mức lương cao thứ 2), tôi khuyên bạn nên ROW_NUMBER ().



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trả về giá trị của biến sql từ bên trong Truy vấn Sql Oracle trở lại mã .NET

  2. Kết nối với Oracle qua TNS không hoạt động

  3. Ánh xạ thuộc tính hướng dẫn cho Oracle trong mã khung thực thể đầu tiên

  4. JOOQ Oracle Number chính xác và ánh xạ số java

  5. Chuyển một hàng thành nhiều hàng Oracle