首页 > 试题广场 >

获取员工其当前的薪水比其manager当前薪水还高的相关信息

[编程题]获取员工其当前的薪水比其manager当前薪水还高的相关信息
  • 热度指数:320625 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个,部门关系表dept_emp简况如下:
emp_no
dept_no 
from_date 
to_date
10001 d001
1986-06-26 9999-01-01
10002 d001
1996-08-03 9999-01-01

有一个部门经理表dept_manager简况如下:
dept_no 
emp_no
from_date 
to_date
d001
10002
1996-08-03 9999-01-01

有一个薪水表salaries简况如下:
emp_no 
salary
from_date 
to_date
10001
88958 2002-06-22
9999-01-01
10002
72527 1996-08-03
9999-01-01

获取员工其当前的薪水比其manager当前薪水还高的相关信息,
第一列给出员工的emp_no,
第二列给出其manager的manager_no,
第三列给出该员工当前的薪水emp_salary,
第四列给该员工对应的manager当前的薪水manager_salary
以上例子输出如下:
emp_no manager_no emp_salary manager_salary
10001 10002 88958 72527
示例1

输入

drop table if exists  `dept_emp` ; 
drop table if exists  `dept_manager` ; 
drop table if exists  `salaries` ; 
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`));
INSERT INTO dept_emp VALUES(10001,'d001','1986-06-26','9999-01-01');
INSERT INTO dept_emp VALUES(10002,'d001','1996-08-03','9999-01-01');
INSERT INTO dept_manager VALUES('d001',10002,'1996-08-03','9999-01-01');
INSERT INTO salaries VALUES(10001,88958,'2002-06-22','9999-01-01');
INSERT INTO salaries VALUES(10002,72527,'1996-08-03','9999-01-01');

输出

10001|10002|88958|72527
select
    a.emp_no,
    s.emp_no as manager_no,
    d.salary as emp_salary,
    f.salary as manager_salary
from
    dept_emp as a,
    dept_manager as s,
    salaries as d,
    salaries as f
where
    a.dept_no = s.dept_no
    and a.emp_no = d.emp_no
    and s.emp_no = f.emp_no
    and d.salary > f.salary
就把工资表连接两次一次绑定员工的工资,一次绑定部门经理的工资再进行比较

发表于 2025-04-07 10:49:34 回复(0)
with k as
(select dept_no,a.emp_no manager_no,salary manager_salary from dept_manager a 
left join salaries b on a.emp_no = b.emp_no),
k1 as(
   select c.emp_no,manager_no,c.dept_no ,salary emp_salary,manager_salary from dept_emp c
   left join salaries d on d.emp_no = c.emp_no
   left join k on k.dept_no = c.dept_no )
select emp_no,manager_no,emp_salary,manager_salary from k1 where emp_salary>manager_salary

发表于 2025-04-02 13:33:15 回复(0)
select de.emp_no, q1.emp_no, s.salary emp_salary, q1.salary manager_salary
from dept_emp de
join salaries s
using(emp_no)
left join 
(
    select dm.dept_no,dm.emp_no,s.salary
    from dept_manager dm
    join salaries s
    using(emp_no)
) as q1
using(dept_no)
where s.salary>q1.salary
发表于 2025-03-24 08:19:21 回复(0)
select a.emp_no emp_no,b.emp_no manager_no,c1.salary emp_salary,c2.salary manager_salar
from
dept_emp a
left join salaries c1 on a.emp_no=c1.emp_no
left join dept_manager b on a.dept_no =b.dept_no
left join salaries c2 on b.emp_no=c2.emp_no
where
c1.salary>c2.salary
发表于 2025-03-10 09:12:45 回复(0)
with t1 as(
select a.emp_no, b.emp_no as manager_no
from dept_emp as a
inner join dept_manager as b using(dept_no)
where a.emp_no <> b.emp_no),
t2 as(
select a.emp_no, manager_no, b.salary as emp_salary
from t1 as a
inner join salaries as b
on a.emp_no = b.emp_no)

select a.emp_no, a.manager_no, a.emp_salary, b.salary as manager_salary
from t2 as a
inner join salaries as b
on a.manager_no = b.emp_no
where a.emp_salary > b.salary

发表于 2025-03-06 17:37:21 回复(0)
with t as ( select s.salary as emp_salary, s.emp_no , de.dept_no
from salaries s
left join dept_emp de on s.emp_no = de.emp_no
),
t1 as ( select s.salary as manager_salary,s.emp_no as manager_no,dm.dept_no
from  salaries s
left join dept_manager dm on  s.emp_no = dm.emp_no
where dm.dept_no is not null)
select t.emp_no, t1.manager_no, t.emp_salary, t1.manager_salary
from t
left join t1 on t.dept_no = t1.dept_no
where emp_salary > manager_salary;
发表于 2025-03-04 13:19:53 回复(0)
with t01 as (
            select a.emp_no as emp_no,
                   a.dept_no as dept_no,
                   coalesce(b.manager,0) as status,
                   c.salary as salary
                from
                (
                    select emp_no,
                           dept_no
                    from dept_emp
                    where to_date = '9999-01-01'
                ) a
                left join
                (
                    select emp_no,
                           1 AS manager
                    from dept_manager
                    where to_date = '9999-01-01'
                ) b
                on a.emp_no = b.emp_no
                left join
                (
                   select emp_no,
                           salary
                    from salaries
                    where to_date = '9999-01-01'
                ) c
                on c.emp_no = a.emp_no
),
t02 as (
    select a.emp_no as emp_no,
           b.emp_no as manager_no,
           a.salary as emp_salary,
           b.salary as manager_salary
        from (
            select emp_no,
                   dept_no,
                   salary
                from t01
                where status = 0
        ) a
        left join (
            select emp_no,
                   dept_no,
                   salary
                from t01
                where status = 1
        )b
        on a.dept_no = b.dept_no
)
select distinct
       emp_no,
       manager_no,
       emp_salary,
       manager_salary
    FROM t02
    where emp_salary >manager_salary;
发表于 2025-03-03 20:57:12 回复(0)
SELECT
    d.emp_no,
    e.manager_no,
    d.emp_salary,
    e.manager_salary
FROM (
    SELECT
        a.emp_no,
        a.dept_no ,
        c.salary emp_salary
    FROM
        dept_emp a
    INNER JOIN
        salaries c
    ON
        a.emp_no = c.emp_no
    WHERE
        a.emp_no NOT IN (
            SELECT
                emp_no
            FROM
                dept_manager
        )
)   d
INNER JOIN (
    SELECT
        b.emp_no manager_no,
        b.dept_no ,
        c.salary manager_salary
    FROM
        dept_manager b
    INNER JOIN
        salaries c
    ON
        b.emp_no = c.emp_no
)   e
ON
    d.dept_no = e.dept_no
WHERE
    emp_salary > manager_salary
发表于 2025-02-19 11:23:03 回复(0)
select e.emp_no emp_no, m.emp_no manager_no, e.salary emp_salary, m.salary manager_salary
from
    (select de.emp_no, de.dept_no, sa.salary
     from dept_emp de
     join salaries sa on de.emp_no = sa.emp_no) e
join
    (select dm.emp_no, dm.dept_no, sa.salary
     from dept_manager dm
     join salaries sa on dm.emp_no = sa.emp_no) m
    on e.dept_no = m.dept_no and e.salary > m.salary;

发表于 2025-02-10 16:11:39 回复(0)

联表4次,其中salary 2次

select
    de.emp_no,
    dm.emp_no as manager_no,
    se.salary as emp_salary,
    sm.salary as manager_salary
from
    dept_emp de
    left join dept_manager dm on de.dept_no = dm.dept_no
    left join salaries se on de.emp_no = se.emp_no -- 员工salary
    left join salaries sm on dm.emp_no = sm.emp_no -- 经理salary
where
    se.salary > sm.salary;




发表于 2025-01-29 19:45:20 回复(0)
select a.emp_no	
,b.emp_no manager_no	
,c.salary emp_salary	
,d.salary manager_salary
from dept_emp a join dept_manager b on a.dept_no=b.dept_no
join salaries c on a.emp_no=c.emp_no
join salaries d on b.emp_no=d.emp_no
where c.salary>d.salary
order by emp_no

发表于 2025-01-13 14:26:36 回复(0)
select s.emp_no emp_no,manager_no,s.salary emp_salary, manager_salary
from dept_emp
join salaries s using(emp_no) 
join dept_manager dsm using(dept_no) 
left join (select  dept_no,dm.emp_no manager_no, salary manager_salary
from dept_emp de
join salaries using(emp_no)
join dept_manager dm using(dept_no) 
where de.emp_no in (select emp_no from dept_manager)) ma on  dsm.dept_no = ma.dept_no 
where s.salary > manager_salary
先找到各个部门经理的工资,然后根据部门与全部信息的表进行连接,然后寻找工资高于经理的人的工资

发表于 2024-12-29 20:26:39 回复(0)
select a.emp_no,
       d.emp_no as manager_no ,
       c.salary as emp_salary,
       manager_salary
from  dept_emp  a
join salaries  c  using(emp_no)
join (select salary as manager_salary,dept_no,emp_no
      from  dept_manager  b
      join salaries  c  using(emp_no)) d using(dept_no )
where c.salary >manager_salary

发表于 2024-11-29 11:33:38 回复(0)

select e_sala.emp_no,
    m_sala.emp_no manager_no,
    e_sala.salary emp_salary,
    m_sala.salary manager_salary
from 
-- 员工工资
(select de.emp_no,s.salary,de.dept_no
from dept_emp de 
inner join salaries s on de.emp_no = s.emp_no
inner join dept_manager dm on de.dept_no = dm.dept_no 
where dm.emp_no !=de.emp_no) e_sala
inner join 
-- 经理工资
(select dm.emp_no,s.salary,dept_no 
from dept_manager dm
inner join salaries s on dm.emp_no = s.emp_no) m_sala
on e_sala.dept_no = m_sala.dept_no
where e_sala.salary>m_sala.salary

发表于 2024-11-27 15:28:27 回复(0)
select c.`emp_no`,c.`manager_no`,c.`emp_salary`,c.`manager_salary`
from
(select * from
(select  dept_emp.`dept_no` `dept_no1`,dept_emp.`emp_no`, salaries.`salary` `emp_salary`from dept_emp
left join salaries on dept_emp.`emp_no`=salaries.`emp_no`) a
left join
(select dept_manager.`dept_no`, dept_manager.`emp_no` `manager_no`, salaries.`salary`  `manager_salary` from dept_manager
left join  salaries on dept_manager.`emp_no`=salaries.`emp_no`) b
on a.`dept_no1`=b.`dept_no`) c
where c.`emp_salary`>c.`manager_salary`
发表于 2024-11-05 17:27:23 回复(0)
select
    d_e.emp_no,
    d_m.emp_no as manager_no,
    s1.salary as emp_salary,
    s2.salary as manager_salary
from
    dept_emp as d_e
    inner join dept_manager as d_m on d_e.dept_no = d_m.dept_no
    inner join salaries as s1 on d_e.emp_no = s1.emp_no
    inner join salaries as s2 on d_m.emp_no = s2.emp_no
where
  #找到不是老板的员工号
    d_e.emp_no not in (
        select
            emp_no
        from
            dept_manager
    ) 
#比较工资大小
and s1.salary > s2.salary

发表于 2024-10-31 16:22:35 回复(0)
SELECT
    de.emp_no,
    dm.emp_no AS manager_no,
    s1.salary AS emp_salary,
    s2.salary AS manager_salary
FROM
    dept_emp de
    JOIN salaries s1 ON de.emp_no = s1.emp_no
    AND s1.to_date = '9999-01-01'
    JOIN dept_manager dm ON de.dept_no = dm.dept_no
    AND dm.to_date = '9999-01-01'
    JOIN salaries s2 ON dm.emp_no = s2.emp_no
    AND s2.to_date = '9999-01-01'
WHERE
    s1.salary > s2.salary;
发表于 2024-10-24 14:15:33 回复(0)
select 
    de.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 s1.salary > s2.salary and de.to_date = '9999-01-01'
join出来对应的经理薪水列再比较即可
发表于 2024-10-10 15:10:33 回复(0)