如何关联employee与branch表,按branch_name分组展示薪资总支出
按部门名称分组统计薪资支出的SQL实现
现有employee和branch两张数据表,需按部门名称(branch_name)分组展示薪资支出,关联两张表并显示部门名称与薪资总额的实现方式如下:
核心实现代码
仅统计有员工的部门
SELECT b.branch_name, SUM(e.salary) AS total_salary FROM employee e JOIN branch b ON e.branch_id = b.branch_id GROUP BY b.branch_name;
统计所有部门(含无员工的部门)
如果需要包含暂时没有员工的部门,可使用LEFT JOIN配合COALESCE处理空值:
SELECT b.branch_name, COALESCE(SUM(e.salary), 0) AS total_salary FROM branch b LEFT JOIN employee e ON b.branch_id = e.branch_id GROUP BY b.branch_name;
代码说明
- 通过
JOIN(或LEFT JOIN)以branch_id为关联字段,匹配员工表与部门表的数据,让每条员工记录对应到所属部门名称。 SUM(salary)计算每个部门的薪资总额,别名total_salary让结果可读性更强。GROUP BY b.branch_name指定按部门名称分组,确保统计结果按部门维度聚合。COALESCE函数可将无员工部门的薪资总额(默认返回NULL)替换为0,避免结果出现空值。
原数据表结构
CREATE TABLE employee ( emp_id INT PRIMARY KEY, first_name VARCHAR(40), last_name VARCHAR(40), birth_day DATE, sex VARCHAR(1), salary INT, super_id INT, branch_id INT ); CREATE TABLE branch ( branch_id INT PRIMARY KEY, branch_name VARCHAR(40), mgr_id INT, mgr_start_date DATE, FOREIGN KEY(mgr_id) REFERENCES employee(emp_id) ON DELETE SET NULL );
内容的提问来源于stack exchange,提问作者morbid_coder
相关产品推荐
相关产品推荐

