我有3张桌子:雇员,工作和部门
我想要达到的目标是从一个部门获得雇员人数。
我试了一下:
SELECT count(Emplyees.id) FROM Emplyees
INNER JOIN Job ON (Job.id = Emplyees.job_id)
INNER JOIN Department ON (Department.id = 2)
但它返回所有部门的雇员人数。 有什么建议吗?
答案 0 :(得分:1)
使用WHERE
子句过滤掉department,where子句将应用于连接返回的整个结果集,而on子句中的条件将仅过滤来自连接表的结果
SELECT count(e.id)
FROM Emplyees e
INNER JOIN Job j ON (j.id = e.job_id)
INNER JOIN Department d ON (j.dept_id =d.id )
WHERE d.id = 2
并且还在计数中使用DISTINCT
,因此,如果任何员工申请属于同一部门的多个工作将被计为1,即COUNT(DISTINCT e.id)
答案 1 :(得分:1)
EXISTS条款允许您限制某些事物的存在,而不必担心员工是否还有其他工作,这将使您的计数易于计算。
此外,由于部门唯一需要的是id,您可以将该表格保留下来,然后只按Job表格的dept_id字段进行过滤。
SELECT count(id)
FROM Employees
WHERE EXISTS (
SELECT 1
FROM Job
WHERE id = Employees.job_id
AND dept_id = 2
)