**Department table name** **following with fields name** id , empid ,salary ,departid ,status
如何從單查詢各部門的前兩名薪金最高在MySQLMySQL查詢從各個部門獲得前兩名的工資
**Department table name** **following with fields name** id , empid ,salary ,departid ,status
如何從單查詢各部門的前兩名薪金最高在MySQLMySQL查詢從各個部門獲得前兩名的工資
SELECT emp1.departid , emp1.salary
FROM Department emp1
WHERE (
SELECT COUNT(DISTINCT(emp2.salary))
FROM Department emp2
WHERE emp2.salary > emp1.salary and emp1.departid = emp2.departid) in (0,1) group by emp1.departid , emp1.salary
我已經在sql server中測試了這個解決方案。但我認爲它也可以在ms sql中工作。
謹慎解釋? –
我相信這是你想要的。請注意,這個查詢沒有經過測試,因爲我沒有訪問MySQL數據庫atm的權限。
SELECT
d1.id,
d1.salary,
d1.departid
FROM department d
WHERE
d1.id IN
(
SELECT
d2.id
FROM department d2
WHERE
d2.departid = d1.departid
ORDER BY salary DESC
LIMIT 2
)
這可能不是最高效的查詢,但它可以完成這項工作。
更改頂部2到限制2,後'DESC'。 TOP 2不是mysql的語法 – Justin
我不認爲這適用於mysql –
@Justin謝謝,近來一直在使用MSSQL :) – MrSoundless
嘗試
SELECT id, empid, salary, departid, status
FROM
(
SELECT id, empid, salary, departid, status,
@n := IF(@g = departid, @n + 1, 1) rownum,
@g := departid
FROM table1
ORDER BY departid, salary DESC
) q
WHERE q.rownum <= 2
這裏是SQLFiddle演示
它做什麼它生成內選擇一個職級的基礎上的薪酬每個部門每個員工。然後在外部選擇中篩選出排名超過2的所有行(前兩個)。
很好的答案! +1 – KaeL
這是一個很好的問題,如果你問正確的方式.. :) –