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

表结构:

 

 

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

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

第一阶段全部数据排名:

 

 

第二阶段筛选排名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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
    ;

 结果:

 

 

 

posted @   不带R的墨菲特  阅读(239)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示