SQLでn番目の最高給与を求める方法


方法1: サブクエリを使用する この方法では、内部のサブクエリを使用して、n番目に高い給与を取得します。

SELECT DISTINCT Salary
FROM Employee e1
WHERE n = (
    SELECT COUNT(DISTINCT Salary)
    FROM Employee e2
    WHERE e2.Salary >= e1.Salary
    )

このクエリでは、EmployeeテーブルのSalary列を抽出し、サブクエリを使用してその給与が一意であるn番目の位置を見つけます。外部のクエリでは、サブクエリから返されたn番目の位置の給与を選択します。

方法2: ORDER BYとLIMITを使用する この方法では、ORDER BY句とLIMIT句を使用して給与を降順に並べ替え、n番目の給与を取得します。

SELECT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT n-1, 1

このクエリでは、EmployeeテーブルのSalary列を降順に並べ替え、LIMIT句を使用してn番目の給与を取得します。n-1は0から始まるインデックスであり、1つの結果のみを返すように制限されます。

方法3: ROW_NUMBER()関数を使用する この方法では、ROW_NUMBER()関数を使用して給与をランク付けし、n番目の給与をフィルタリングします。

SELECT Salary
FROM (
    SELECT Salary, ROW_NUMBER() OVER (ORDER BY Salary DESC) AS RowNum
    FROM Employee
    ) sub
WHERE RowNum = n

このクエリでは、ROW_NUMBER()関数を使用してSalary列を降順にランク付けします。外部のクエリでは、RowNumがnと一致する給与を選択します。

これらは一部の一般的なアプローチですが、SQLには他の方法もあります。データベースシステムによっては、異なる構文が必要な場合がありますので、使用しているデータベースに合わせて適切な構文を確認してください。