-5

従業員テーブルからn 番目の最高給与を出力したいと考えていました。

クエリは次のとおりです。

SELECT *
FROM emp E1
WHERE
  (n-1) = (SELECT count(distinct(E2.salary))
           FROM emp E2 Where
           E2.salary< E1.salary)
ORDER BY
  E1.salary ASC

うまく機能しましたが、どのように機能するかを解釈できませんでした。誰かがそれに光を当てることができますか?

4

2 に答える 2

2

これはMYSQLの機能です。

基本的なクエリがある場合は、LIMITを使用できます

-- get the 9th highest salary
SELECT salary FROM tbl_salary
ORDER BY salary DESC
LIMIT 9,1

複雑なクエリの場合は、

-- get the 9th highest salary
select distinct(salary) from tbl_salary e1
where 9 = (
select count(salary) 
from tbl_salary e2
where e1.salary< e2.salary
)
于 2013-03-04T11:15:12.440 に答える
1

おそらく次のように理解する方が簡単です:

select * From emp E1 
where n = 1 + 
         (select count(distinct E2.salary) 
          from emp E2 
          Where E2.salary > E1.salary)

また:

select * From emp E1 
where n =(select count(distinct E2.salary) 
          from emp E2 
          Where E2.salary >= E1.salary)

サブクエリは、外側のクエリの各レコードに対して、同じテーブル上でより高い (または 2 番目のバージョンでは等しい) 値を持つすべての個別の給与値の数を返します。n次に、外側のクエリの等価条件により、より高い給与の数字に一致するレコードのみが選択されるようになります。

元のorder byクエリの は不要です。

于 2013-03-04T11:19:36.170 に答える