原题目是这样的

有一个员工表dept_emp和有一个薪水表salaries,现在要获取每个部门中当前员工薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary,按照部门编号dept_no升序排列。

image-20210928180149805

看完题目之后,思路是用ORDER BYdept_no进行分组,分组完成后求每一组工资的最大值

然后写出这样的sql语句

1
2
3
4
5
6
7
8
9
10
11
SELECT
d.dept_no,
s.emp_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
ORDER BY
d.dept_no

然后点击自测运行,一下就通过了,我这是感觉这题我已经搞定了,然后点击提交,结果出错了!

image-20210928180639521

就差了一点点,于是我把数据导入了我本地的数据库看了一下

dept_emp表

image-20210928180835419

salaries表

image-20210928180919891

很明显,我们发现salary字段没有和emp_no对应起来,dept_no分组后查询的emp_no都是分组的第一个

参考评论区的解体思路

解决思路是先查每个部门和它的最高薪资

image-20210928182744709

再查工资和部门

image-20210928183022991

最后通过工资和部门查到emp_no

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT
t.dept_no,
j.emp_no,
t.maxSalary
FROM
(
SELECT
d.dept_no,
MAX( s.salary ) AS maxSalary
FROM
salaries AS s
INNER JOIN dept_emp AS d ON d.emp_no = s.emp_no
GROUP BY
d.dept_no
) AS t
INNER JOIN ( SELECT d.dept_no, s.salary, d.emp_no FROM dept_emp d JOIN salaries s ON s.emp_no = d.emp_no ) AS j
ON j.dept_no = t.dept_no
AND j.salary = t.maxSalary
ORDER BY
t.dept_no;

image-20210928184841242

image-20210928184939264