2

私はこのリンクhttp://javarevisited.blogspot.in/2012/12/how-to-find-second-highest-or-maximum-salary-sql.htmlを調べていました。これは、従業員テーブルから2番目に高い給与を取得することを示しています, 例に示されているテーブル スキーマを参照して、従業員テーブル自体から 3 番目または 4 番目に高い給与を見つける方法をアドバイスしてください

4

3 に答える 3

2

MySQLの場合、次の方法で2番目に高い値を取得できることを説明する例があります

SELECT salary FROM 
  (SELECT salary FROM Employee ORDER BY salary DESC LIMIT 2) AS emp 
ORDER BY salary LIMIT 1

に置き換える23、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_RANKOLAP関数を使用してランクを定義してから、必要な順序の値を選択することです。たとえば、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 に答える