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

Sử dụng TOP hoặc Xếp hạng khi tìm thấy vài lần quan sát đầu tiên hoặc nhiều nhất

Để có được 100 người đầu tiên được thuê trong công ty

Trước hết, Hãy cẩn thận về các trường hợp ràng buộc được đưa vào kết quả của cả hai truy vấn bên dưới. ví dụ. ngay cả khi bạn có nhân viên với ngày tuyển dụng ngang nhau, họ sẽ được đưa vào danh sách, nghĩa là danh sách có ít nhất 100 người.

Nếu phiên bản Cơ sở dữ liệu của bạn là 12c- , thì bạn cần sử dụng một truy vấn con để trả về kết quả của dense_rank() chức năng:

select department_name, department_id, first_name, hire_date, salary
  from
  (
   select d.department_name, d.department_id, e.first_name, e.hire_date, e.salary,
          dense_rank() over ( order by hire_date ) as e_rank_hire
     from Dtable_department d 
     join Etable_employee e
       on e.department_id = d.department_id
  )
 where e_rank_hire <= 100 
 order by e_rank_hire;

Nếu phiên bản Cơ sở dữ liệu của bạn là 12c+ , sau đó bạn không cần sử dụng truy vấn con vì lợi ích của fetch mệnh đề:

select d.department_name, d.department_id, e.first_name, e.hire_date, e.salary
  from Dtable_department d 
  join Etable_employee e
    on e.department_id = d.department_id
order by hire_date
fetch first 100 rows with ties;

Hãy chú ý đến trường hợp của bạn khi sử dụng partition by mệnh đề sai và cần được xóa trong dense_rank() biểu thức của hàm và thứ tự ngày thuê không được giảm dần mà tăng dần.

Demo cho 10 nhân viên hàng đầu




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Vấn đề mã hóa phản hồi yêu cầu HTTP Oracle PL / SQL

  2. XML Oracle:Trích xuất nhiều nút con

  3. Oracle Cách liệt kê những ngày cuối cùng của tháng giữa 2 ngày

  4. Sự khác biệt giữa các ký tự N'String 'và U'String' trong Oracle

  5. Làm thế nào để buộc oracle sử dụng tính năng quét phạm vi chỉ mục?