私はこのリンクhttp://javarevisited.blogspot.in/2012/12/how-to-find-second-highest-or-maximum-salary-sql.htmlを調べていました。これは、従業員テーブルから2番目に高い給与を取得することを示しています, 例に示されているテーブル スキーマを参照して、従業員テーブル自体から 3 番目または 4 番目に高い給与を見つける方法をアドバイスしてください
質問する
993 次
3 に答える
2
MySQLの場合、次の方法で2番目に高い値を取得できることを説明する例があります
SELECT salary FROM
(SELECT salary FROM Employee ORDER BY salary DESC LIMIT 2) AS emp
ORDER BY salary LIMIT 1
に置き換える2
と3
、3 番目に高い値になります。サブクエリはn
最高の給与を選択し、外側のクエリはその結果の最低を選択します。
このスキームは、構文がわずかに異なる場合でも、任意の RDBMS で使用できます。DB2 の場合、次のように動作するはずです (ただし、現時点では確認できません)。
SELECT salary FROM
(SELECT salary FROM Employee ORDER BY salary DESC FETCH FIRST 2 ROWS ONLY) AS emp
ORDER BY salary FETCH FIRST ROW ONLY
于 2012-12-23T09:37:08.970 に答える
1
最善の策は、DENSE_RANK
OLAP関数を使用してランクを定義してから、必要な順序の値を選択することです。たとえば、3番目に高い給与を見つけるには:
SELECT MAX(salary)
FROM (
SELECT DENSE_RANK() OVER (ORDER BY salary DESC) AS rank
, salary
FROM employee
) AS xxx
WHERE rank = 3
DENSE_RANK
データ内の「関係」を処理します。同じ給与の従業員が複数いる可能性があるため、このMAX
関数を使用して1人だけを保持します。構文も機能するlimit 1
可能性がありますが、私はそれを使用したことがありません。
于 2012-12-23T15:13:06.233 に答える
1
select * from (
select * from employee
order by salary desc
limit 4) x
order by salary
limit 1;
2 つの制限を適用します。1 つは内側のクエリが上位 4 行を取得するためのもので、もう 1 つはそれらから最下位の行を取得するための制限です。
于 2012-12-23T09:39:32.967 に答える