最简单解法 | 求薪水排名第二的员工,不用order by

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

https://www.nowcoder.com/practice/c1472daba75d4635b7f8540b837cc719

核心思路:分别求两次maxSalary,第二次maxSalary如果小于第一次的maxSalary,那么它就是排名第二的薪资。

-- 第一次求maxSalary
select
    max(salary) as maxSalary
from salaries;

-- 第二次求maxSalary,同时判断是否小于第一次的maxSalary
-- 小于就证明是排名第二的薪资
select
    max(salary)
from salaries
where salary < ( select max(salary) as maxSalary from salaries));

-- 根据以上结果,查询薪资第二的员工信息
select
    t1.emp_no,
    salary,
    last_name,
    first_name
from employees t1
join salaries t2
on t1.emp_no = t2.emp_no
and salary = (
select max(salary) from salaries
where salary < (
select max(salary) as maxSalary
from salaries));

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务