方法一:联结两个表,然后内嵌一个子查询用于查询最高工资,再将子查询与外面的联结用部门联系在一起,即可查找出各部门工资最高情况
SELECT de.dept_no, de.emp_no, s.salary maxSalary
FROM dept_emp de JOIN salaries s
ON de.emp_no = s.emp_no
WHERE s.salary IN (SELECT MAX(s1.salary)
FROM dept_emp de1 JOIN salaries s1
ON de1.emp_no = s1.emp_no
AND de1.dept_no = de.dept_no)
ORDER BY de.dept_no
方法二:制作两张表,一张是部门、员工、工资表,另一张是部门、最高工资表,然后将两表联结在一起,查询出结果
SELECT t1.dept_no, t1.emp_no, t2.salary
FROM
(SELECT de1.dept_no, s1.emp_no, s1.salary
FROM dept_emp de1 join salaries s1
ON de1.emp_no = s1.emp_no
) AS t1,
(SELECT de2.dept_no, max(s2.salary) as salary
FROM dept_emp de2 join salaries s2
ON de2.emp_no = s2.emp_no
GROUP BY de2.dept_no
) AS t2
WHERE t1.salary = t2.salary
AND t1.dept_no = t2.dept_no
ORDER BY t1.dept_no;方法三:这个我也不算确定,但是在SQLite里是能通过的,刚学的一点点开窗函数在这题上的使用,其实思路和方法一类似,如果不对欢迎指出
SELECT de.dept_no, de.emp_no, s.salary
FROM dept_emp de JOIN salaries s
ON de.emp_no = s.emp_no
WHERE s.salary IN (SELECT MAX(s1.salary) OVER(PARTITION BY de1.dept_no)
FROM dept_emp de1 JOIN salaries s1
ON de1.emp_no = s1.emp_no
WHERE de.dept_no = de1.dept_no)
ORDER BY de.dept_no


京公网安备 11010502036488号