sql >> Database >  >> RDS >> Oracle

Gebruik TOP of Rank bij het vinden van de eerste paar of de meeste waarnemingen

Om de eerste 100 mensen aangenomen te krijgen voor het bedrijf

Allereerst, wees voorzichtig met de gelijkspelgevallen die zijn opgenomen in de resultaten van beide onderstaande vragen. bijv. zelfs als je een werknemer hebt met dezelfde aanstellingsdatum, worden ze opgenomen in de lijsten, wat betekent dat lijsten minstens 100 mensen hebben.

Als uw databaseversie 12c- . is , dan moet je een subquery gebruiken om het resultaat van dense_rank() te retourneren functie :

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;

Als uw databaseversie 12c+ . is , dan hoeft u geen subquery te gebruiken omwille van fetch clausule :

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;

Let op voor uw geval dat het gebruik van partition by clausule is verkeerd en moet worden verwijderd binnen de dense_rank() uitdrukking van de functie en de volgorde van indienstnemingsdatums mogen niet aflopend maar oplopend zijn.

Demo voor top 10 werknemer




  1. Hoe door komma's gescheiden afdelings-ID's te vervangen door respectievelijk hun naam?

  2. MySQL 5.7 &only_full_group_by

  3. Deze query wijzigen om rijen te groeperen en alle rijen uit te filteren, behalve die met de kleinste waarde

  4. Converteer 'datetime' naar 'datetimeoffset' in SQL Server (T-SQL-voorbeelden)