ホームページ >データベース >mysql チュートリアル >Oracle の分析機能はどのようにして 2 番目に高い従業員の給与を見つけることができるのでしょうか?

Oracle の分析機能はどのようにして 2 番目に高い従業員の給与を見つけることができるのでしょうか?

DDD
DDDオリジナル
2025-01-07 17:56:40157ブラウズ

How Can Oracle's Analytic Functions Find the Second Highest Employee Salary?

Oracle 分析関数を使用して、2 番目に高い従業員の給与を見つけます

2 番目に高い給与を見つけることは、従業員データ テーブルでよく必要となります。他のプログラミング言語とは異なり、Oracle では、このタスクを簡素化する一連の分析関数が提供されています。

2 番目に高い給与を求める事前定義関数を検索します

Oracle は、2 番目に高い給与を見つけるのに役立つ分析関数をいくつか提供しています。これらには次のものが含まれます:

  • DENSE_RANK()
  • ランク()
  • ROW_NUMBER()

2 番目に高い給与のみを選択してください

2 番目に高い給与だけを取得する必要がある場合は、上記の関数のいずれかを使用できます。例:

<code class="language-sql">SELECT sal
FROM (
  SELECT DISTINCT sal,
         RANK() OVER (ORDER BY sal DESC) AS rnk
  FROM emp
)
WHERE rnk = 2;</code>

他の従業員情報を選択

他の従業員情報を選択する場合、重複を考慮する必要があるため、機能の選択が非常に重要になります。

ROW_NUMBER()

ROW_NUMBER() は給与順で 2 番目の従業員を返します。ただし、最高または 2 番目に高い給与が同数の場合は、行がスキップされることがあります。

ランク()

RANK() は、最高給与が同点の場合、レコードをスキップします。この場合、RANK = 2 のレコードは存在しません。

DENSE_RANK()

DENSE_RANK() は、同点の場合でもレコードの順序を保持するため、通常は推奨されます。同点のレコードに独自のランキングを割り当てます。

2 番目に高い給与と名前を選択してください

2 番目に高い給与と従業員名の両方を選択するには、次の関数を組み合わせて使用​​できます。

<code class="language-sql">SELECT name, sal
FROM emp
WHERE sal = (SELECT MAX(sal) FROM emp WHERE sal < (SELECT MAX(sal) FROM emp));</code>

ロジックをより明確に表現するために、次のメソッドを使用することもできます:

<code class="language-sql">SELECT name, sal
FROM (
    SELECT name, sal, DENSE_RANK() OVER (ORDER BY sal DESC) as rank
    FROM emp
) ranked_salaries
WHERE rank = 2;
</code>

以上がOracle の分析機能はどのようにして 2 番目に高い従業員の給与を見つけることができるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。