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以上を稼いだ人に限られます。

私が行った方法では、部門の1つでは正しい結果が表示されますが、他の部門では完全に間違ったカウントが表示されます. たとえば、部門 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 に答える