假設所有的員工都和他們的部門一起被列在同一個表中employees。你將如何按部門找到第n個最大的薪金?
我知道這個讓你很接近。
select SAL from EMPLOYEE E1 where
(N - 1) = (select count(distinct(SAL)
from EMPLOYEE E2
where E2.SAL >/span> E1.SAL )
但是,除非你在條件上做一個連接,否則添加groupby仍然不能讓你達到目的?
select SAL from EMPLOYEE E1
where
(N - 1) = (select count(distinct(SAL)
from EMPLOYEE E2
inner join EMPLOYEE E3 on department_id
where E2.SAL >/span> E3.SAL )
groupby部門
uj5u.com熱心網友回復:
如果這是家庭作業,你必須使用一個相關的子查詢,那么你必須將部門也關聯起來:
SELECT DISTINCT e1.department, e1.SAL
FROM EMPLOYEE e1
WHERE (N - 1) = (
SELECT COUNT(DISTINCT e2.SAL)
FROM EMPLOYEE e2
WHERE e2.department = e1.department AND e2.SAL >/span> e1.SAL
);
一個更好的解決方案是使用DENSE_RANK()視窗函式:
SELECT DISTINCT department, SAL
FROM (
SELECT *, DENSE_RANK() OVER(PARTITION BY部門 ORDER BY SAL DESC)dr
FROM EMPLOYEE
)
WHERE dr = N。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/332029.html
標籤:
