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

Oracle SQL - Cách lấy 5 giá trị cao nhất của một cột

Cách tốt nhất để làm điều này là sử dụng các hàm phân tích, RANK () hoặc DENSE_RANK () ...

SQL> select * from (
  2        select empno
  3               , sal
  4               , rank() over (order by sal desc) as rnk
  5        from emp)
  6  where rnk <= 5
  7  /

     EMPNO        SAL        RNK
---------- ---------- ----------
      7839       5000          1
      7788       3000          2
      7902       3000          2
      7566       2975          4
      8083       2850          5
      7698       2850          5

6 rows selected.

SQL>

DENSE_RANK () nén các khoảng trống khi có sự ràng buộc:

SQL> select * from (
  2        select empno
  3               , sal
  4               , dense_rank() over (order by sal desc) as rnk
  5        from emp)
  6  where rnk <= 5
  7  /

     EMPNO        SAL        RNK
---------- ---------- ----------
      7839       5000          1
      7788       3000          2
      7902       3000          2
      7566       2975          3
      8083       2850          4
      7698       2850          4
      8070       2500          5

7 rows selected.

SQL>

Hành vi nào bạn thích phụ thuộc vào yêu cầu kinh doanh của bạn.

Ngoài ra còn có hàm phân tích ROW_NUMBER () mà chúng tôi có thể sử dụng để trả về một số hàng chính xác. Tuy nhiên, chúng ta nên tránh sử dụng các giải pháp dựa trên số hàng trừ khi logic nghiệp vụ vui lòng tự ý cắt ngắn tập kết quả trong trường hợp hòa. Có sự khác biệt giữa việc yêu cầu năm giá trị cao nhất năm bản ghi đầu tiên được sắp xếp theo giá trị cao

Ngoài ra còn có một giải pháp không phân tích bằng cách sử dụng cột giả ROWNUM. Điều này thật khó hiểu vì ROWNUM được áp dụng trước mệnh đề ORDER BY, điều này có thể dẫn đến kết quả không mong muốn. Hiếm khi có bất kỳ lý do nào để sử dụng ROWNUM thay vì ROW_NUMBER () hoặc một trong các hàm xếp hạng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn EF tới Oracle ném ORA-12704:bộ ký tự không khớp

  2. 2 Hàm trả về tháng từ một ngày trong Oracle

  3. Định cấu hình Hibernate để sử dụng SYS_GUID () của Oracle cho Khóa chính

  4. Làm cách nào để biết liệu tôi có thực hiện công việc chưa cam kết trong một giao dịch Oracle hay không?

  5. Cách nhanh hơn để Chèn, thông qua tập lệnh, trong Oracle?