如何通过SQL带条件连接查询获取部门名称及部门平均薪资
按部门统计平均薪资的SQL实现
首先明确两张表的常规命名约定,你可以根据实际业务里的表名替换对应标识:
- 员工表记为
emp,包含字段:empname(员工姓名)、emid(员工ID)、depid(所属部门ID)、sal(员工薪资) - 部门表记为
dep,包含字段:depid(部门ID)、depname(部门名称)
核心实现逻辑是通过两表的公共关联字段depid做表连接,再按部门维度分组聚合计算平均薪资,最终仅返回要求的部门名称、平均薪资两个字段即可。
基础写法(仅统计有在职员工的部门)
如果需求只需要返回存在员工的部门统计结果,使用内连接即可,SQL代码如下:
SELECT d.depname, AVG(e.sal) AS avg_dep_sal FROM dep d INNER JOIN emp e ON d.depid = e.depid GROUP BY d.depid, d.depname;
扩展写法(包含无员工的部门)
如果需要把没有任何员工的部门也展示在结果中,将内连接替换为左连接即可,无员工部门的平均薪资可以按业务需求处理为0或者NULL:
SELECT d.depname, AVG(COALESCE(e.sal, 0)) AS avg_dep_sal FROM dep d LEFT JOIN emp e ON d.depid = e.depid GROUP BY d.depid, d.depname;
注意事项
- 分组时建议带上
depid字段,避免出现不同部门重名时统计数据混淆的问题 AVG()聚合函数默认会自动忽略NULL值,如果业务规则里薪资为NULL代表无薪、需要按0参与平均计算,就用COALESCE(e.sal, 0)做空值转换,无特殊需求直接写AVG(e.sal)即可- 返回字段的别名
avg_dep_sal可以根据自身业务命名习惯调整,没有强制要求
内容的提问来源于stack exchange,提问作者Sagar Pahariya
相关产品推荐
相关产品推荐

