1. ホーム
  2. sql

[解決済み] オラクルでの最大給与額(Ns

2022-02-18 21:14:18

質問内容

OracleでN番目の最大給与を見つけるために、私は以下のクエリを使用しています。

SELECT DISTINCE sal 
FROM emp a 
WHERE (
       SELECT COUNT(DISTINCE sal) 
       FROM emp b 
       WHERE a.sal<=b.sal)=&n;

  • しかし、私によると、上記のクエリを使用すると、テーブルのサイズが大きい場合、実行するために多くの時間がかかるでしょう。

  • 私は以下のクエリを使用しようとしています。

    SELECT sal 
    FROM (
          SELECT DISTINCE sal 
          FROM emp 
               ORDER BY sal DESC ) 
    WHERE rownum=3;
    
    
  • クエリを最適化し、クエリの実行時間を短縮する方法について、何かリンクを教えてください。

解決方法は?

これを試してみてください

select *
  from
  (
    select
        sal
          ,dense_rank() over (order by sal desc) ranking
    from   table
  )
  where ranking = 4 -- Replace 4 with any value of N