0

好吧,我Workers的数据库中有表。有 4列idname和。我需要显示部门列表,其中工资超过最高工资值的 90% 的工人数量以及具有这种工资的工人数量超过部门工人数量的 15%。salarydepartment

起初我做了这样的查询,它显示了所有有高薪工人的行

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

也许我问的是非常愚蠢的事情,但我卡住了,我真的不知道下一步该怎么做才能摆脱那些薪水很高但在他们的部门中只有不到 15% 的员工得到这样的薪水。

4

1 回答 1

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)
于 2012-10-30T19:54:27.643 回答