题解 | #获取每个部门中当前员工薪水最高的相关信息#
select emp_salaries.dept_no,emp_salaries.emp_no,max_salaries.maxSalary from
(select d.emp_no,d.dept_no,s.salary from dept_emp as d left join salaries as s on d.emp_no = s.emp_no) as emp_salaries left join
(select d.dept_no,max(s.salary) as maxSalary from dept_emp as d left join salaries as s on d.emp_no = s.emp_no group by d.dept_no) as max_salaries
on emp_salaries.dept_no = max_salaries.dept_no
where emp_salaries.salary = max_salaries.maxSalary
order by emp_salaries.dept_no asc 还有点复杂,题意如下:获取每个部门中当前员工薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary,按照部门编号dept_no升序排列,以上例子输出如下:
(注意: Mysql与Sqlite select 非聚合列的结果可能不一样)
思路:
step1: 获取每个部门中当前员工薪水最高的相关信息,创建一个视图,根据group by 找出部门的最大薪水。
step2:创建视图,保留员工,部门,薪水的信息。
step3:用step2中的视图 left join step1中的视图 可以形成 员工,部门,薪水, 部门,最大薪水的新视图
step4:最大薪水和员工薪水相同的保留下来,不同的是错误的记录
step5:别忘了按照部门排序。
