1
SELECT
dnum
, SUM(IF(salary>20000, 1, 0)) AS Employee
FROM project 
INNER JOIN works_on
ON pno=pnumber
INNER JOIN employee
ON dno=dnum
GROUP BY dnum HAVING COUNT(*) >2

我首先要确定每个部门是否有超过 2 名员工,如果是,则获取部门编号和员工人数。但只有那些赚高于20,000的人。

我这样做的方式,它显示了其中一个部门的正确结果,但对于其他部门,它显示了完全错误的计数。例如,对于部门 4,它显示 18,但正确的计数应该只有 6。

4

1 回答 1

1

改为使用WHERE salary > 20000,没有必要使用CASE它:

SELECT 
  dnum, 
  COUNT(*) AS Employee
FROM project 
INNER JOIN works_on ON pno = pnumber
INNER JOIN employee ON dno = dnum
WHERE salary > 20000
GROUP BY dnum 
HAVING COUNT(*) >2;

COUNT (DISTINCT EmployeeNumber)如果有重复的数字,您可能还需要使用。

于 2013-11-03T11:09:02.913 回答