插入后更新行中的计数

时间:2019-02-08 14:40:28

标签: postgresql

我是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”

1 个答案:

答案 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