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

如何编写单条SQL查询展示员工、直属经理及部门薪酬相关信息

正确SQL实现方案

原代码错误原因

  • UNION ALL要求前后查询的列数、对应列数据类型完全匹配,你第一段查询返回3列,第二段仅返回1列,直接触发列数不匹配报错
  • 你的需求不需要拆分普通员工和经理用UNION ALL查询,拆分查询反而会增加逻辑复杂度
  • 原代码中判断值不为NULL的写法错误,SQL中<> NULL的判断永远返回假,必须用IS NOT NULL判断非空
  • 原代码中sum的用法不符合需求,你需要的是薪资和佣金的数值之和,不是计数

正确SQL语句

默认你的emp表包含mgr字段存储直属经理的员工编号empno,如果实际字段名不同可自行调整:

SELECT 
  e.ename AS 员工姓名,
  m.ename AS 直属经理姓名,
  d.name AS 所属部门名称,
  (COALESCE(e.sal, 0) + COALESCE(e.comm, 0)) AS 薪资佣金总和
FROM emp e
LEFT JOIN emp m 
  ON e.mgr = m.empno -- 自关联获取直属经理信息,左连接保留无经理的员工
LEFT JOIN dept d 
  ON e.deptno = d.deptno;

逻辑说明

  • 员工表自关联用左连接,确保没有直属经理的员工不会被过滤,对应经理姓名字段返回NULL
  • 用标准SQL函数COALESCE把为NULL的薪资/佣金转换为0再相加,避免NULL参与计算导致结果为NULL的问题
  • 所有员工(包含管理人员)都会被正常返回,不需要额外拆分查询逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:57:03