首页 > 试题广场 >

获取当前薪水第二多的员工的emp_no以及其对应的薪水sal

[编程题]获取当前薪水第二多的员工的emp_no以及其对应的薪水sal
  • 热度指数:395861 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个薪水表salaries简况如下:
emp_no 
salary
from_date 
to_date
10001
88958 2002-06-22
9999-01-01
10002 72527 2001-08-02
9999-01-01
10003
43311 2001-12-01
9999-01-01

请你获取薪水第二多的员工的emp_no以及其对应的薪水salary,
若有多个员工的薪水为第二多的薪水,则将对应的员工的emp_no和salary全部输出,并按emp_no升序排序。
emp_no 
salary
10002 72527
示例1

输入

drop table if exists  `salaries` ; 
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 salaries VALUES(10001,88958,'2002-06-22','9999-01-01');
INSERT INTO salaries VALUES(10002,72527,'2001-08-02','9999-01-01');
INSERT INTO salaries VALUES(10003,43311,'2001-12-01','9999-01-01');

输出

10002|72527
select emp_no,salary from salaries where salary =(Select salary from salaries  order by salary desc limit 1 offset 1);
发表于 2025-01-25 23:14:55 回复(0)
select emp_no,salary
from (

select emp_no,salary,dense_rank()  over(order by salary desc) as b
from salaries

) as a

where  a.b=2
order by emp_no;
发表于 2025-01-17 23:08:44 回复(0)
select emp_no, salary
from salaries
where salary = (
    select distinct(salary) from salaries order by salary desc limit 1 offset 1
)
order by emp_no

发表于 2025-01-02 16:42:12 回复(0)
select emp_no, salary
from (select emp_no, salary ,dense_rank()over(order by salary desc) dr
from salaries) ranked
where dr = 2
order by emp_no
用dense_rank进行排序
发表于 2024-12-26 16:51:23 回复(0)
select 
emp_no,
salary
from (
select 
emp_no,
salary,
dense_rank () over ( order by salary) as 排名
from salaries s)a
where 排名=2
group by 
emp_no,
salary
order by emp_no desc
为什么我的在mysql里面正确 提交就不对了


发表于 2024-11-27 16:25:10 回复(0)
是不是写复杂了
with s1 as (
    select distinct salary from salaries
    order by salary desc
    limit 1,1
)
select
    emp_no,
    salary
from
    salaries
where
    salary = (select salary from s1)
order by
    emp_no asc;

发表于 2024-10-18 13:25:05 回复(0)
select
emp_no,salary
from
(
select emp_no ,salary,
dense_rank() over(order by salary desc)as rk
from salaries 子表要命名
)as t
where t.rk=2 对子表字段进行限定
DENSE_RANK() OVER (ORDER BY <expression> [ASC | DESC])
RANK() OVER (ORDER BY <expression> [ASC | DESC])
    
    RANK(): 如果有并列的情况,它会跳过并列之后的排名值。
DENSE_RANK(): 即使有并列的情况,它也不会跳过任何排名值。




发表于 2024-09-15 15:15:33 回复(0)
select emp_no,salary
from salaries
where salary = (
    select distinct salary
    from salaries 
    order by salary desc
    limit 1,1)
order by emp_no asc

发表于 2024-09-03 16:50:22 回复(0)
养成标重点的习惯:题:请你获取薪水第二多的员工的emp_no以及其对应的薪水salary

首先要提取出薪水第二多的薪水数据
 SELECT salary FROM salaries ORDER BY salary DESC LIMIT 1, 1
再根据第二多的薪水数据找到其对应的员工emp_no
SELECT
    emp_no,
    salary 
FROM
    salaries 
WHERE
    salary = ( SELECT salary FROM salaries ORDER BY salary DESC LIMIT 1, 1 )


发表于 2024-09-03 09:18:37 回复(0)
select emp_no,salary
from
(
select emp_no,salary,
dense_rank() over(order by salary desc) dr
from salaries
)a
where a.dr = 2 order by emp_no
发表于 2024-08-10 17:58:12 回复(0)
找出小于最大的值里面最大的SELECT emp_no, salary FROM salaries WHERE salary = ( SELECT MAX(salary) FROM salaries WHERE salary < ( SELECT MAX(salary) FROM salaries ) )
发表于 2024-08-09 17:27:14 回复(0)
使用窗口函数 dense_rank
select emp_no ,salary from  (select emp_no ,salary, dense_rank() over(order by   salary desc) as rn from salaries )a where rn=2

发表于 2024-05-16 11:09:10 回复(1)
select emp_no, secchart.salary from salaries
join (select salary from salaries
group by salary order by salary desc limit 1,1)secchart on salaries.salary=secchart.salary
为了解决可能有多人工资并列高的问题:(1)首先使用 group by的自动去重特性,找出第二高工资的数额;(2)再使用 where,将所有工资为该数额的员工编号找出来。
发表于 2024-05-13 23:40:20 回复(0)

select emp_no,salary
from (select emp_no,salary,dense_rank() over(order by salary desc) rk
from salaries) t
where rk = 2

发表于 2024-04-30 09:18:43 回复(0)
窗口函数思路:
select
    t.emp_no,
    t.salary
from
    (
        select
            emp_no,
            salary,
            dense_rank() over (
                order by
                    salary desc
            ) as des_rank
        from
            salaries
    ) as t
where
    t.des_rank = 2
order by
    t.emp_no asc;


编辑于 2024-04-02 14:53:31 回复(0)
select s.emp_no, s.salary
from(
    select emp_no, salary,
    dense_rank() over (order by salary desc) as paiming
    from salaries
)as s
where paiming= 2;
不需要考虑to_date ,而且不能去重,如果有多个排名第二的薪水去重后只显示一条的,所以得用dense_rank()来排序后选择排名第二的。
发表于 2024-03-06 23:38:31 回复(0)
select emp_no,salary from salaries
where 
salary=(select distinct salary from salaries order by salary desc limit 1,1);

编辑于 2024-02-05 12:26:39 回复(0)