我是SQL的新手,有一个问题。我使用的是PostgreSQL。
我有两个表,分别称为“员工”和“办公室”
表“雇员”中有一个唯一的雇员列表,每个雇员都有一个OfficeID(他们工作的办公室)。
我要做的是“计数” Office_ID的出现次数,并将该计数计入“ offices”表中,其中“ office_ID”具有称为“ number_of_employees”的列。
例如,对于SQL来说是全新的,我什至设法做到的唯一一件事。
SELECT COUNT(*)
FROM employees
WHERE office_id = 203
但这只会选择ID为“ 203”的行的总和,该行的总和必须手动输入“员工人数”
我想要的是一个触发函数,当将新记录插入到表“ empolyees”中时,该函数将更新字段“ number_of_empolyees”
答案 0 :(得分:2)
视图是前往此处的方式。 我假设您是SQL的新手,所以不确定如何使其工作(编辑:发布:^ D之后才看到您的评论)。
为每个办公室计算员工人数的正确方法是:
JOIN
请注意,您的SELECT office_id, COUNT(*) as employeeCount
FROM employees
GROUP BY office_id
如何被WHERE office_id = XXX
取代,以便在单个查询中计算所有办公室的员工人数。
完成后,我们可以在视图内部使用它。
请注意GROUP BY office_id
:我相信您的架构中,办公室可能没有员工(例如,在创建后或删除前)。我们将使用JOIN
处理该部分。
LEFT JOIN
注意:为避免空办公室在CREATE VIEW OfficeWithEmployeeCount AS
SELECT Offices.*, EmployeeCount
FROM Offices
LEFT OUTER JOIN (SELECT office_id, COUNT(*) as EmployeeCount FROM Employees GROUP BY office_id) T
ON Offices.office_id = T.office_id
中返回NULL
,您可能需要编写:
EmployeeCount