ホームページ > データベース > mysql チュートリアル > データベースから 3 番目 (または N 番目) の最高給与を効率的に見つけるにはどうすればよいですか?

データベースから 3 番目 (または N 番目) の最高給与を効率的に見つけるにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-19 21:00:57
オリジナル
841 人が閲覧しました

How to Efficiently Find the Third (or Nth) Maximum Salary in a Database?

給与テーブルから 3 番目または nᵗʰ の最大給与を効率的に見つける

データベース管理の領域では、給与テーブルから 3 番目または nᵗʰ の最大給与を抽出することが重要なことがよくあります。データ分析とレポート作成を目的としたタスク。このプロセスを最適化するために、さまざまなアプローチを使用できます。

行番号アプローチ:

この手法では、各給与値に行番号を降順で割り当てます。結果をフィルタリングして指定したランク (例: 2 または 3) の行を含めることで、希望する最大給与値を直接取得できます。

SELECT Salary,EmpName
FROM
  (
   SELECT Salary,EmpName,ROW_NUMBER() OVER(ORDER BY Salary) As RowNum
   FROM EMPLOYEE
   ) As A
WHERE A.RowNum IN (2,3)
ログイン後にコピー

サブクエリ アプローチ:

このメソッドは次の方法を利用します。指定された nᵗʰ 最大給与を超える個別の給与値の数を決定するサブクエリ。このカウントを (N-1) と等しくすることで (N は希望のランク)、クエリは nᵗʰ の最高給与に対応する行を直接取得します。

SELECT *
FROM Employee Emp1
WHERE (N-1) = (
               SELECT COUNT(DISTINCT(Emp2.Salary))
               FROM Employee Emp2
               WHERE Emp2.Salary > Emp1.Salary
               )
ログイン後にコピー

トップ キーワード アプローチ:

このアプローチでは、TOP キーワードを利用して、給与を降順に並べ替えるサブクエリから nᵗʰ 最大給与を直接選択します。次に、結果を給与順に並べて目的の値を抽出します。

SELECT TOP 1 salary
FROM (
      SELECT DISTINCT TOP n salary
      FROM employee
      ORDER BY salary DESC
      ) a
ORDER BY salary
ログイン後にコピー

アプローチの選択は、特定のデータベース環境とデータ量によって異なります。行番号アプローチは一般に、小規模なデータセットに対して効率的ですが、サブクエリおよび上位キーワード アプローチは、大規模なデータセットに対してよりパフォーマンスが高くなります。

以上がデータベースから 3 番目 (または N 番目) の最高給与を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート