2013-06-13 58 views

回答

7
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中工作。

+0

謹慎解釋? –

1

我相信這是你想要的。請注意,這個查詢沒有經過測試,因爲我沒有訪問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 

    ) 

這可能不是最高效的查詢,但它可以完成這項工作。

+1

更改頂部2到限制2,後'DESC'。 TOP 2不是mysql的語法 – Justin

+0

我不認爲這適用於mysql –

+0

@Justin謝謝,近來一直在使用MSSQL :) – MrSoundless

9

嘗試

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的所有行(前兩個)。

+0

很好的答案! +1 – KaeL

相關問題