-- 方法一
SELECT
d.dept_no,
d.emp_no,
s.salary
FROM
dept_emp AS d
JOIN salaries AS s ON d.emp_no = s.emp_no
WHERE
( d.dept_no, s.salary ) IN (-- in 的用法可以使用元组形式
-- 找出部门和对应的最高工资
SELECT
d.dept_no,
max( s.salary )
FROM
dept_emp AS d
JOIN salaries AS s ON d.emp_no = s.emp_no
GROUP BY
d.dept_no
) -- 应付题目要求,排序输出
ORDER BY
d.dept_no 方法二:
- 先将每个部门最高工资和对应的部门找出来,形成表t2;
- 再将每个人对应的工资及对应的部门找出来形成表t1
- 再将t1和t2连接,条件是部门相同,工资相同
SELECT DISTINCT t1.dept_no,t1.emp_no,t2.maxsalary FROM
(
SELECT
d.emp_no,d.dept_no,s.salary
FROM
dept_emp d
JOIN
salaries s
ON
d.emp_no = s.emp_no
) as t1
JOIN
(
SELECT
d.dept_no ,
max(s.salary) as maxsalary
FROM
dept_emp d
JOIN
salaries s
ON
d.emp_no = s.emp_no
GROUP BY
d.dept_no
) as t2
ON
t1.dept_no = t2.dept_no
AND
t1.salary = t2.maxsalary
ORDER BY
t1.dept_no

京公网安备 11010502036488号