题目描述
有一个员工表 dept_emp 简况如下:
有一个薪水表 salaries 简况如下:
获取所有部门中员工薪水最高的相关信息,给出 dept_no,emp_no 以及其对应的 salary ,按照部门编号升序排列,上述示例的查询结果为:
答案解析
本题思路如下:
- 分组(GROUP BY)计算每个部门的最高薪资
- 连接员工部门信息表(dept_emp)和薪资表(salaries)以及步骤一查询出的最高薪资表
- 筛选出工资等于最高薪资的人,查询相应的 dept_no,emp_no,maxSalary
- 注意部门编号排序(ORDER BY)
SQL 语句如下所示:
SELECT d.dept_no,d.emp_no,m.maxSalary
FROM dept_emp AS d
INNER JOIN salaries AS s
ON d.emp_no = s.emp_no
INNER JOIN
(
-- 查询每个部门最高的薪资
SELECT d.dept_no,MAX(s.salary) AS maxSalary
FROM dept_emp AS d INNER JOIN salaries AS s
ON d.emp_no = s.emp_no
GROUP BY d.dept_no
) AS m
ON d.dept_no = m.dept_no
WHERE m.maxSalary = s.salary
ORDER BY d.dept_no;