Để 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