ホームページ >データベース >mysql チュートリアル >Oracle の分析機能はどのようにして 2 番目に高い従業員の給与を見つけることができるのでしょうか?
Oracle 分析関数を使用して、2 番目に高い従業員の給与を見つけます
2 番目に高い給与を見つけることは、従業員データ テーブルでよく必要となります。他のプログラミング言語とは異なり、Oracle では、このタスクを簡素化する一連の分析関数が提供されています。
2 番目に高い給与を求める事前定義関数を検索します
Oracle は、2 番目に高い給与を見つけるのに役立つ分析関数をいくつか提供しています。これらには次のものが含まれます:
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 サイトの他の関連記事を参照してください。