首页 > 试题广场 >

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

[编程题]获取当前薪水第二多的员工的emp_no以及其对应的薪水sal
  • 热度指数:408069 时间限制: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
头像 牛客题解官
发表于 2025-03-17 11:01:16
精华题解 这道题目要求我们从薪水表中找出薪水第二高的员工编号及其对应的薪水。我们要做的事情如下: 1. 确定总体问题 我们需要使用窗口函数对薪水进行排名,找出排名为第二的薪水记录,如果有多个员工的薪水为第二高,则需要输出所有这些员工的信息,并按员工编号升序排列。我们需要使用窗口函数来实现排名,并筛选出排名为第 展开全文
头像 啊狗哥
发表于 2020-03-18 23:07:56
考虑到工资第一多第二多的员工都有可能有多个,所以需要将其按照工资分组再排序 SELECT emp_no, salary FROM salaries WHERE salary = (SELECT salary  &nb 展开全文
头像 数据分析阿宇君
发表于 2020-08-21 15:31:51
法一:row_number开窗函数(当薪水第二的人有多个时只会输出一个) select emp_no,salary from (select emp_no,salary,row_number() over(order by salary desc) t from salaries where to_ 展开全文
头像 Anjhon_
发表于 2020-05-03 22:37:25
最高工资可能有多个人, 先拿到最高工资的值, 在把这个值当作条件查员工编号和工资 select emp_no, salary from salaries where salary = (select distinct salary from salaries 展开全文
头像 陈少野
发表于 2021-01-18 20:59:01
1.max()+子查询最简单的设想,找出薪水最大值,排除之后,找出剩下的薪水最大值就是第二多的薪水。缺点:求排名第几的薪水就要写多少个子查询,不够优雅。select emp_no,salaryfrom salarieswhere to_date='9999-01-01' andsalary = (s 展开全文
头像 N刻后告诉你
发表于 2020-05-19 20:33:10
题目:获取当前(to_date=‘9999-01-01’)薪水第二多的员工的emp_no以及其对应的薪水salary 子查询+DISTINCTSELECT emp_no, salaryFROM salariesWHERE to_date = '9999-01-01' AND salary = 展开全文
头像 高质量搬砖人
发表于 2021-01-29 15:41:11
方法1)dense_rank()over() 求工资排名第二的记录 SELECT a.emp_no, a.salary -- 再套一层查询 FROM( SELECT emp_no, salary, dense_rank()over(ORD 展开全文
头像 此用户名涉嫌违规
发表于 2021-03-05 09:34:23
题目要求:获取薪水第二多的员工的emp_no以及其对应的薪水salary 个人思路:考虑到存在多人领相同数额的薪水情况,这里需要对薪水去重。先用子查询找出第二高的薪水数额。再找出领取这个数额员工的emp_no。 limit m,n和limt n offset m的理解:同样是指跳过m行取n条数据,只 展开全文
头像 牛客743345957号
发表于 2021-02-01 19:31:58
注意点:可能存在并列第一、并列第二的情况 思路一:在子查询中去重 方法一:group by去重 select emp_no, salary from salaries where to_date = '9999-01-01' and salary = ( select salary from sal 展开全文
头像 Kings.Yao
发表于 2020-11-12 10:29:18
法一:开窗函数薪水第二多和第一多的员工数可能都不唯一,所以用dense_rank而不用rank或row_number。select a.emp_no,a.salaryfrom ( select emp_no,salary, dense_rank() over (order by s 展开全文
头像 数据流动DataFlow
发表于 2023-03-12 23:38:58
方法一:思路:先子查询出第二高的薪水,在查询出 salary = 第二高薪水的(emp_no ,salary)代码: select emp_no, salary from salaries where salary = ( select 展开全文