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

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

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

如何理解自连接查询?

select s.emp_no, s.salary, e.last_name, e.first_name
from salaries s join employees e
on s.emp_no = e.emp_no
where s.salary =
    (
    select s1.salary
    from salaries s1 join salaries s2      -- 自连接查询
    on s1.salary <= s2.salary
    group by s1.salary                     
    having count(distinct s2.salary) = 2   -- (去重之后的数量就是对应的名次)
    );

举例子来看哈:
当使用 s1.salary <= s2.salary 进行自连接之后,表变成了这样:

s1.salary s2.salary
100 100
99 100
98 100
98 100
97 100
99 99
98 99
98 99
97 99
。。。 。。。

相信画到这里,大家已经明白了,我们接下来在按照s1.salary进行分组的话:
》=100的会分到一个组(1个)
》=99的有两个(100,99)
。。。。
递推即可。
然后对s2.salary进行去重,计数即可!!

关键还是看我画的表。

全部评论
牛啊老哥,瞬间清晰了
1 回复 分享
发布于 2021-04-22 16:13
妙啊
点赞 回复 分享
发布于 2022-09-13 19:57 广东
having count(distinct s2.salary) = 2 卡到这里了,哪位大神指教一下分组之后怎么要统计s2
点赞 回复 分享
发布于 2022-02-28 21:08
前面用小于 后面=1 也是一样的~
点赞 回复 分享
发布于 2021-11-04 12:47
妙手
点赞 回复 分享
发布于 2021-09-24 09:32
还是不懂啊 s1.salary <= s2.salary???
点赞 回复 分享
发布于 2021-05-15 22:02

相关推荐

湫湫湫不会java:1.在校经历全删了2.。这些荣誉其实也没啥用只能说,要的是好的开发者不是好好学生3.项目五六点就行了,一个亮点一俩行,xxx技术解决,xxx问题带来xxx提升。第一页学历不行,然后啥有价值的信息也没有,到第二页看到项目了,第一个项目九点,第二个项目像凑数的俩点。总体给人又臭又长,一起加油吧兄弟
点赞 评论 收藏
分享
06-10 21:15
门头沟学院 Java
宁阿:好多这种没🧠的公司,他们估计都不知道毕业的人不能给安排实习岗
实习吐槽大会
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 11:47
点赞 评论 收藏
分享
评论
44
9
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务