题解 | 找出每个学校GPA最低的同学(效率最高、最严谨、最可拓展的解法)

找出每个学校GPA最低的同学

https://www.nowcoder.com/practice/90778f5ab7d64d35a40dc1095ff79065

# 1. 用窗口函数效率最高,相比于用表连接和where in关联子查询的写法,避免了多次全表扫描;
# 2. 窗口函数的排名方面,row_number()用于排名是不严谨的,遇到最低分相同有两人及以上时,就要出错了;而虽然rank()和dense_rank()都能解决最低排名有两人及以上的问题,但如果遇到需求要取分数倒数第二时,rank因为并列之后会跳过2的编号、直接到3了,所以也不方便取数;而dense_rank()综可以完美解决这个问题。

# 综上,窗口函数 + dense_rank()才是最佳写法。
select
    device_id,
    university,
    gpa
from
    (
        select
            device_id,
            university,
            gpa,
            dense_rank() over (
                partition by
                    university
                order by
                    gpa
            ) as dens_rank
        from
            user_profile
    ) as a
where
    a.dens_rank = 1
order by
    university asc;

全部评论

相关推荐

05-25 10:45
门头沟学院 Java
Frank_zhang:没实习一个项目肯定不够,可以再做一个轮子,技术栈再补一个mq,微服务,整体再换个简历模板,暑期尽量再找一个日常实习
点赞 评论 收藏
分享
爱吃肉的伊登在写日记:好棒,27届简历能做成这个样子,但是第一个项目感觉cover住难度还是不小的,特别是二面的时候肯定要对分布式系统设计这一块儿有高出正常面试者的水平才行
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

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