牛客网数据库SQL实战25—— 获取员工其当前的薪水比其manager当前薪水还高的相关信息

牛客网数据库SQL实战25—— 获取员工其当前的薪水比其manager当前薪水还高的相关信息

题目描述

获取员工其当前的薪水比其manager当前薪水还高的相关信息,当前表示to_date=‘9999-01-01’,
结果第一列给出员工的emp_no,
第二列给出其manager的manager_no,
第三列给出该员工当前的薪水emp_salary,
第四列给该员工对应的manager当前的薪水manager_salary

CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));

CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));

CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

输入描述:

输出描述:

emp_no manager_no emp_salary manager_salary
10001 10002 88958 72527
10009 10010 95409 94409

我的解答

select de.emp_no as emp_no,dm.emp_no as manager_no,s1.salary as emp_salary,s2.salary as manager_salary
from dept_emp de
left join dept_manager dm
on de.dept_no = dm.dept_no
left join salaries s1
on de.emp_no = s1.emp_no
left join salaries s2
on dm.emp_no = s2.emp_no
where de.to_date='9999-01-01'
and dm.to_date='9999-01-01'
and s1.to_date='9999-01-01'
and s2.to_date='9999-01-01'
and s1.salary > s2.salary

先根据dept_no 找出员工对应的manager的emp_no ,再分别通过员工表和管理员表的emp_no 找出对应的salary

我觉得最好的答案

本题主要思想是创建两张表(一张记录当前所有员工的工资,另一张只记录部门经理的工资)进行比较,具体思路如下:

  1. 先用INNER JOIN连接salaries和demp_emp,建立当前所有员工的工资记录sem
  2. 再用INNER JOIN连接salaries和demp_manager,建立当前所有员工的工资记录sdm
  3. 最后用限制条件sem.dept_no = sdm.dept_no AND sem.salary > sdm.salary找出同一部门中工资比经理高的员工,并根据题意依次输出emp_no、manager_no、emp_salary、manager_salary
SELECT sem.emp_no AS emp_no, sdm.emp_no AS manager_no, sem.salary AS emp_salary, sdm.salary AS manager_salary
FROM (SELECT s.salary, s.emp_no, de.dept_no FROM salaries s INNER JOIN dept_emp de
ON s.emp_no = de.emp_no AND s.to_date = '9999-01-01' ) AS sem, 
(SELECT s.salary, s.emp_no, dm.dept_no FROM salaries s INNER JOIN dept_manager dm
ON s.emp_no = dm.emp_no AND s.to_date = '9999-01-01' ) AS sdm
WHERE sem.dept_no = sdm.dept_no AND sem.salary > sdm.salary
发布了175 篇原创文章 · 获赞 58 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/sunbocong/article/details/105606728