Oracle
 sql >> база данни >  >> RDS >> Oracle

Използвайте TOP или Rank, когато намирате първите няколко или повечето наблюдения

За да наемете първите 100 души във фирмата

Първо, внимавайте за случаите на равенство, включени в резултатите от двете заявки по-долу. напр. дори ако имате служител с еднаква дата на наемане, те са включени в списъците, което означава, че списъците съдържат поне 100 души.

Ако вашата база данни е 12c- , тогава трябва да използвате подзаявка, в която да върнете резултата от dense_rank() функция :

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;

Ако вашата база данни е 12c+ , тогава не е необходимо да използвате подзаявка заради fetch клауза :

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;

Обърнете внимание за вашия случай, че използвате partition by клаузата е грешна и трябва да бъде премахната в dense_rank() изразът на функцията и редът на датите на наемане не трябва да са низходящи, а възходящи.

Демо за най-добри 10 служители




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Свързване на стойности от множество колони в Oracle

  2. Как да получа списък със заключени потребители в база данни на Oracle?

  3. Странни промени в скоростта с sql заявка

  4. Как да открием 4-байтови UTF8 символи в Oracle

  5. SQL Developer 4.1.2