2017-07-03 56 views
-3

在最高的兩個值我想找到頂部2仔每個部門尋找每一組

表=> staff_masters 具有「staff_name」爲員工欄和「dept_code」爲相應的部門。

我試着喜歡這個

SELECT TOP 2 staff_sal 
FROM staff_masters 
GROUP BY dept_code; 

請通過子句中使用組。如果你想不同工資

select sm.* 
from (select dept_code, staff_sal, 
      row_number() over (partition by dept_code order by staff_sal desc) as seqnum 
     from staff_masters 
    ) sm 
where seqnum <= 2; 

,你會用dense_rank()而不是row_number()

+0

我想使用group by子句。有沒有辦法做到這一點? –

+0

「GROUP BY」用於[聚合](https://en.wikipedia.org/wiki/Aggregate_function)。但是,您要求[排名](https://en.wikipedia.org/wiki/Ranking)。 –

+0

此任務提示是「使用GROUP BY子句」。那我該怎麼做呢? –

回答

0

您可以用Row_Number()窗口函數做到這一點:

Select Dept_Code, Staff_Sal 
From 
(
    Select Dept_Code, Staff_Sal, 
      Row_Number() Over (Partition By Dept_Code Order By Staff_Sal Desc) As RN 
    From Staff_Masters 
) A 
Where RN <= 2 
Order By Dept_Code, RN 
+0

這個任務的提示是「使用GROUP BY子句」。那我該怎麼做呢? –

+1

@ShyamSundar這不是「GROUP BY」專爲......而設計的,「GROUP BY」是用於*聚合* ......「ROW_NUMBER」是用於排名的。你並沒有嘗試執行聚合,你正在嘗試執行排名,所以你需要使用'ROW_NUMBER'。您無法通過「GROUP BY」獲得相關信息。 – Siyual

+0

好,那麼謝謝你提供的這個任務的e –

1

你會使用row_number()

+0

提示是「使用GROUP BY子句」。那我該怎麼做呢? –