Reputation: 29
I am working on an SQL query to do the following:
For each project on which more than two employees work, retrieve the project number, the project name, and the number of employees who work on that project.
This is what I have currently for project number 1:
SELECT project.PNO, project.PNAME, COUNT(DISTINCT works_on.ESSN)
AS '# of employess worked on'
FROM project INNER JOIN works_on
ON project.PNO = works_on.PNO
INNER JOIN employee
ON works_on.ESSN = employee.SSN
HAVING COUNT(DISTINCT works_on.ESSN) > 2
AND project.PNO LIKE 1
and it returns:
PNO:1
PNAME:ProductX
number of employess worked on: 7
When it should return NULL since project number 1 only has two distinct ESSNs in the works_on table, but instead it is returning the total number of distinct ESSNs in the works_on table
Attached is my schema:
Upvotes: 2
Views: 91
Reputation: 3354
Use the Group by and the where clause like this:
SELECT project.PNO, project.PNAME, COUNT(DISTINCT works_on.ESSN)
AS '# of employess worked on'
FROM project INNER JOIN works_on
ON project.PNO = works_on.PNO
INNER JOIN employee
ON works_on.ESSN = employee.SSN
where project.PNO LIKE 1
group by project.PNO, project.PNAME
HAVING COUNT(DISTINCT works_on.ESSN) > 2
Upvotes: 0
Reputation: 311883
You need to have there results by project, meaning you're missing a group by
clause:
SELECT project.PNO,
project.PNAME,
COUNT(DISTINCT works_on.ESSN) AS '# of employess worked on'
FROM project
INNER JOIN works_on ON project.PNO = works_on.PNO
INNER JOIN employee ON works_on.ESSN = employee.SSN
GROUP BY project.PNO, project.PNAME -- Here!
HAVING COUNT(DISTINCT works_on.ESSN) > 2 AND project.PNO LIKE 1
Upvotes: 2