You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何基于employee表的count统计更新department表的dcount列

错误原因

你原来的写法中,子查询没有和外层更新的department表做行关联,直接分组后返回了所有部门的员工计数结果(多行),单个字段赋值不能接收多行结果,因此触发报错。

修正方案

方案1:关联子查询写法(兼容所有主流SQL数据库)

这种写法逻辑简单,适合小数据量场景:

UPDATE department
SET dcount = (
    SELECT COUNT(*) 
    FROM employee 
    WHERE employee.dno = department.dnumber
);

如果需要把没有员工的部门的dcount设置为0而非NULL,可以加COALESCE处理:

UPDATE department
SET dcount = COALESCE(
    (SELECT COUNT(*) FROM employee WHERE employee.dno = department.dnumber),
    0
);

方案2:关联更新写法(适合MySQL/PostgreSQL等支持关联更新的数据库,大数据量下效率更高)

先提前分组统计好每个部门的员工数,再批量关联更新:

UPDATE department d
LEFT JOIN (
    SELECT dno, COUNT(*) AS emp_count
    FROM employee
    GROUP BY dno
) e ON d.dnumber = e.dno
SET d.dcount = COALESCE(e.emp_count, 0);

更新完成后执行以下语句即可验证结果是否符合预期:

SELECT dname, dnumber, dcount FROM department ORDER BY dnumber;

内容的提问来源于stack exchange,提问作者Sai Gruheeth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:06:01