2021/2/13 [SQL]获取所有部门中当前员工当前薪水最高的相关信息
获取每个部门中当前员工薪水最高的相关信息
https://www.nowcoder.com/practice/4a052e3e1df5435880d4353eb18a91c6
解题思路
- 看似复杂,其实这题的解题思路与《查找入职员工时间排名倒数第三的员工所有信息》 类似,都可以使用笛卡尔积去比较。
- 根据 emp_no 内联 dept_emp 表和 salaries 表为 A 表,然后再同样根据 emp_no 内联一次 dept_emp 表和 salaries 表称为 B 表,然后 A 表和 B 表根据部门编号 dept_no 进行笛卡尔积,比较 A 表和 B 表的相同部门内的工资,如果 A 表工资比 B 表工资低,用 COUNT() 函数计数一次,最后计算出来数值为 0 的说明在同一部门内没有人比自己(即 A 表)工资高。(如果为 1 说明自己是第二高,2 说明自己是第三高)
代码实现
SELECT d1.dept_no, d1.emp_no, s1.salary maxSalary FROM dept_emp d1 LEFT JOIN salaries s1 ON d1.emp_no = s1.emp_no WHERE ( SELECT count(*) FROM dept_emp d2 LEFT JOIN salaries s2 ON d2.emp_no = s2.emp_no WHERE d1.dept_no = d2.dept_no AND s1.salary < s2.salary ) < 1 ORDER BY d1.dept_no;