SQL关联EMP与DEPT表查询各部门最高、最低工资问题求助
解决部门薪资统计需求的SQL方案
嘿,我懂你现在的烦恼——找了不少简易方案但始终没拿到预期结果对吧?别着急,针对你要「显示每个部门的名称以及该部门的最低和最高工资」的需求,我给你整理了一个严谨且实用的SQL方案,还会拆解逻辑帮你搞明白:
核心SQL语句
SELECT d.DNAME AS 部门名称, MIN(e.SAL) AS 最低工资, MAX(e.SAL) AS 最高工资 FROM DEPT d LEFT JOIN EMP e ON d.DEPTNO = e.DEPTNO GROUP BY d.DNAME, d.DEPTNO ORDER BY d.DEPTNO;
关键逻辑拆解
- 表关联方式:用
LEFT JOIN而非INNER JOIN,是为了保证哪怕某个部门没有任何员工,也能在结果里显示该部门的名称(此时最低工资和最高工资会显示为NULL)。如果你的场景里不需要展示空部门,直接把LEFT JOIN换成INNER JOIN就行。 - 聚合函数的使用:
MIN(e.SAL)和MAX(e.SAL)是SQL的聚合函数,会自动对每个分组内的SAL字段计算极值,正好对应你要的最低/最高工资。 - 分组的严谨性:
GROUP BY同时包含d.DNAME和d.DEPTNO,是为了避免极端情况(比如不同部门碰巧重名)导致的统计错误,按部门编号分组是最准确的,带上部门名称只是为了展示方便。 - 结果排序:
ORDER BY d.DEPTNO让结果按部门编号排序,看起来更规整,也符合日常查看习惯。
为什么之前的简易方案可能失效?
你提到之前的简易方案没得到预期结果,大概率是这几个原因:
- 没做表关联:直接对EMP表聚合,但拿不到DEPT表的部门名称;
- 用了
INNER JOIN导致空部门被过滤; - 分组字段不完整:只按
DNAME分组,遇到重名部门会把不同部门的薪资混在一起统计; - 没处理
SAL字段的NULL值?不过从你给的EMP数据看,SAL都是有值的,这个可能性不大。
内容的提问来源于stack exchange,提问作者Spindender
相关产品推荐
相关产品推荐

