四行代码搞定~
一、知识点汇总
主要考察排序窗口函数的使用。
二、题目解读
1)获取每个部门中当前员工薪水最高的相关信息,
a、当前员工(离职员工不算)to_date=‘9999-01-01'
b、每个部门的薪水最高:可能同时存在好几个,排序应该用dense_rank()over(partition by 部门 order by 薪水 DESC)
2)给出dept_no, emp_no以及其对应的salary,
表头
dept_no:部门id
emp_no:员工id
salary:薪资
3)按照部门编号dept_no升序排列,
order by dept_no
a、当前员工(离职员工不算)to_date=‘9999-01-01'
b、每个部门的薪水最高:可能同时存在好几个,排序应该用dense_rank()over(partition by 部门 order by 薪水 DESC)
2)给出dept_no, emp_no以及其对应的salary,
表头
dept_no:部门id
emp_no:员工id
salary:薪资
3)按照部门编号dept_no升序排列,
order by dept_no
三、解题步骤
解题思路:使用emp_no连接两张表后,使用窗口函数对员工的薪水进行排序,找出排序为第一名的员工即可(ps.要记得选择在职员工哦~)。
STEP1:连接两张表,并且对部门员工薪资进行排序
WITH t1 AS( SELECT dept_no,emp_no,salary,DENSE_RANK()OVER(PARTITION BY dept_no ORDER BY salary DESC) salary_rk #对每个部门员工的薪水进行排序 FROM dept_emp JOIN salaries USING(emp_no))#使用emp_no来关联两张表
STEP2:选择薪资最高的员工们的相关信息
SELECT dept_no,emp_no,salary FROM t1 WHERE salary_rk=1 #筛选薪资最高的员工们 ORDER BY dept_no;
完整代码
WITH t1 AS( SELECT dept_no,emp_no,salary,DENSE_RANK()OVER(PARTITION BY dept_no ORDER BY salary DESC) salary_rk FROM dept_emp JOIN salaries USING(emp_no))#使用emp_no来关联两张表 SELECT dept_no,emp_no,salary FROM t1 WHERE salary_rk=1 ORDER BY dept_no;