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

如何修正SQL查询以获取各部门员工平均薪资(含无员工部门)

问题修正方案

核心问题分析

原查询存在两个关键问题:

  • 用内连接(JOIN):仅返回两表匹配的部门,丢失了无员工的Sales部门
  • 用窗口函数avg() over():为每个员工行重复输出部门平均薪资,导致结果行数等于员工数而非部门数

修正后的SQL语句

SELECT 
    d.department_id,
    d.department_name,
    -- 无员工时显示0,也可替换为'无员工'等自定义内容
    ROUND(NVL(AVG(e.salary), 0)) avg_sal
FROM departments d
LEFT JOIN employees e ON d.department_id = e.department_id
GROUP BY d.department_id, d.department_name
ORDER BY d.department_id;

修正说明

  1. LEFT JOIN:以部门表为主表,保留所有部门记录,哪怕对应员工表无匹配数据
  2. GROUP BY:按部门分组,每个部门仅生成一行结果,配合聚合函数AVG()计算平均薪资
  3. NVL():处理无员工部门的平均薪资,将AVG()返回的NULL转换为0(可按需调整显示内容)
  4. ORDER BY:按部门ID排序,让结果更规整

正确查询结果

DEPARTMENT_ID    DEPARTMENT_NAME    AVG_SAL
1                IT                 76111
2                DBA                133333
3                Sales              0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:30:58