用dense_rank()窗口函数解决,同时注意易错点

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

https://www.nowcoder.com/practice/8d2c290cc4e24403b98ca82ce45d04db

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

本来一直报错,后来想到,窗口函数不小心写错了,写成:dense_rank() over (partition by emp_no order by salary desc),这是错误的,正确的是:dense_rank() over (order by salary desc),区别在于错误的多了partition by emp_no,这样会导致按照emp_no分组,由于emp_no算是每个人的id,各不相同,倘若加入分组会导致每个人作为一个组,每个组只有一个人,最后order by排序得到的结果是每个人的排名都是1,这样是没有意义且得不到结果的。对于partition by分组的使用还是要仔细些。

全部评论
为什么最后还要orderby排序
点赞 回复 分享
发布于 03-13 11:54 广东

相关推荐

Xistic:啊哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
投递阿里巴巴集团等公司10个岗位
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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