题解 | #找出每个学校GPA最低的同学#

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

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

select
    b.device_id,
    b.university,
    b.gpa
from
    (
        select
            a.device_id,
            a.university,
            a.gpa,
            rank() over (
                partition by
                    a.university
                order by
                    a.gpa asc
            ) as rk
        from
            user_profile a
    ) b
where
    b.rk = 1

方案一:开窗函数的最基础使用,我记得不用开窗也可以实现,待会儿用另一种方法来写

方案二:下面是用变量的方式做的,oracle和mysql的时候都各自写一份各自特点的解题方式,有些题用起来效率不错

SELECT 
  b.device_id,
  b.university,
  b.gpa 
FROM
  (SELECT 
    a.device_id,
    a.university,
    a.gpa,
    CASE
      WHEN a.university = @preCol 
      THEN 
      CASE
        WHEN a.gpa = @preGPA 
        THEN @rk 
        ELSE @rk := @rk + 1 
      END 
      ELSE @rk := 1 
    END AS rk,
    @preCol := a.university,
    @preGPA := a.gpa 
  FROM
    user_profile a,
    (SELECT 
      @preCol := NULL,
      @preGPA := 0,
      @rk := 0) b 
  ORDER BY a.university,
    a.gpa) b 
WHERE b.rk = 1

全部评论

相关推荐

点赞 评论 收藏
分享
dongsheng66:如果想进大厂的话,在校经历没必要占这么大篇幅,可以把专业技能单独放一个专栏写,可以加个项目经历
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务