2012-10-30 86 views
0

那麼,我在我的數據庫中得到了表Workers。有4列id,name,salarydepartment。我需要列出部門名單,其中薪金超過工資最高值的90%的工人的數量和這些工資的工人數量超過部門工人數量的15%。如何製作正確的子查詢?

起初,我做了這樣的查詢顯示了用誰擁有很大的薪金

SELECT * 
FROM `Workers` 
WHERE id IN (
    SELECT `id` 
    FROM `Workers` 
    WHERE `salary` > 0.9 * (SELECT MAX(`salary`) 
          FROM `Workers`)) 

工人也許我真的問愚蠢的事情都行,但我還是堅持,我不知道是不是真的如何使下一步扔由此可見,工資高但部門工資低於15%的工人獲得這樣的工資。

+0

哪個SQL執行?例如,MySQL和Oracle具有非常不同的功能和語法。 – MatBailie

+0

嗯,它的MySQL – DanilGholtsman

回答

2

這是醜陋的,但它應該工作:

SELECT department, COUNT(*) 
FROM `Workers` w 
WHERE id IN 
    (SELECT `id` FROM `Workers` 
    WHERE `salary` > 0.9 * (SELECT MAX(`salary`) FROM `Workers`)) 
GROUP BY department 
HAVING COUNT(*) > 0.15 * 
    (SELECT COUNT(*) FROM `Workers` 
    WHERE department = w.department) 
+0

哦,是的,它的工作原理!謝謝! – DanilGholtsman