题目:获取每个部门中当前员工薪水最高的相关信息
有一个员工表dept_emp简况如下:
有一个薪水表salaries简况如下:
获取所有部门中员工薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary,按照部门编号升序排列,以上例子输出如下:
我的思路:
先查出部门和部门最高工资作为临时表,命名为t;然后和工资表做左连接,条件是相同salary的。
我的sql:
select t.dept_no,sa.emp_no,t.salary maxSalary from salaries as sa left join (select d.dept_no,max(s.salary) from salaries as s inner join dept_emp as d on d.emp_no=s.emp_no group by d.dept_no) as t on t.salary=sa.salary
我这样写有问题吗?编译器报错找不到t.salary:SQL_ERROR_INFO: "Unknown column 't.salary' in 'field list'"
临时表的命名格式不对吗?求大佬帮忙看看咋搞啊
赞自己解决问题!
发现问题了,因为我没有给临时表里查出的salary字段命名,导致查不出t.salary。
以下是无语法错误的sql:
select
t.dept_no,sa.emp_no,t.salary maxSalary
from
salaries as sa
left join
(select
d.dept_no,max(s.salary) salary
from
dept_emp d
inner join
salaries s
on
d.emp_no=s.emp_no
group by
d.dept_no)t
on
t.salary=sa.salary
然后针对这道题,我有个思路不对。其实我不应该用t.salary=sa.salary关联,这么做是有问题的:因为salary可能多个人都是相同的salary,这么做会导致假如和最高薪资重合的员工号(有可能是其他部门的)都会关联进来,与题目说的本部门最高薪资员工不符。
正确思路:关联员工表和薪水表得到表1,求出员工,部门,薪水;
关联员工表和薪水表得到“部门最高薪水表2”,求出最高薪水,部门;
表1表2join on条件:表1.salary=表2.maxSalary and 表1.部门=表2.部门
sql代码:
select
t.dept_no,sa.emp_no,t.salary maxSalary
from
(select
d.dept_no,d.emp_no,s.salary
from
dept_emp d
join
salaries s
on
s.emp_no=d.emp_no
)as sa
join
(select
d.dept_no,max(s.salary) salary
from
dept_emp d
inner join
salaries s
on
d.emp_no=s.emp_no
group by
d.dept_no)t
on
t.salary=sa.salary and t.dept_no=sa.dept_no
order by t.dept_no asc