天天看点

sql 面试题开窗函数row_number() over(partition by ... 分组 order by ...排序) as rn

表结构:

sql 面试题开窗函数row_number() over(partition by ... 分组 order by ...排序) as rn

问题:求出每个班前三成绩的人姓名班级和排名

-- 解析,开窗函数, over(partition by 分组列1,分组列2   order by  排序列)as  排名

第一阶段全部数据排名:

sql 面试题开窗函数row_number() over(partition by ... 分组 order by ...排序) as rn

第二阶段筛选排名

SELECT
  rn ,
  score,
  class,
  sname
from
  (
  SELECT
    *,
    ROW_NUMBER()
  OVER(PARTITION by
  class
  order by
    score desc 
  ) rn
  from
    std_score 
)t
where
  t.rn <= 3
  ;      

 结果:

sql 面试题开窗函数row_number() over(partition by ... 分组 order by ...排序) as rn