Oracle HR模式下各部门最低工资员工的纯SQL实现咨询
两种纯SQL实现各部门薪资最低员工查询的方法
针对HR模式的Employees表,以下是两种不用分析函数的等价实现方案:
方法一:GROUP BY + 自连接
先通过分组查询得到每个部门的最低工资,再将结果与原表关联,匹配部门ID和薪资条件,从而获取完整的员工信息:
SELECT e.employee_id, e.first_name, e.department_id, e.salary FROM employees e INNER JOIN ( -- 子查询获取各部门最低工资 SELECT department_id, MIN(salary) AS dept_min_salary FROM employees GROUP BY department_id ) dm ON e.department_id = dm.department_id AND e.salary = dm.dept_min_salary;
如果存在部门ID为NULL的员工(即未分配部门的员工),可以把INNER JOIN换成LEFT JOIN,HR模式里这类员工的部门ID统一为NULL,分组后会单独成一组,INNER JOIN也能匹配到。
方法二:标量子查询匹配
直接在WHERE子句中使用标量子查询,判断当前员工的薪资是否等于其所在部门的最低工资:
SELECT e.employee_id, e.first_name, e.department_id, e.salary FROM employees e WHERE e.salary = ( SELECT MIN(salary) FROM employees WHERE department_id = e.department_id );
这个方法逻辑更直观,子查询会针对每一行员工数据,返回对应部门的最低工资,再与当前员工的薪资做比较,符合条件的就会被筛选出来。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

