sql >> データベース >  >> RDS >> Oracle

最初のいくつかまたは最も多くの観測値を見つけるときは、TOPまたはランクを使用します

    最初の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. MySQLとUTF-8

    2. 別のプロシージャから sys_refcursor を取得して一括収集し、別のテーブルに挿入する

    3. Django移行エラー:列が存在しません

    4. mysqlの手順