SQL 分组排序后取值

本文介绍了如何使用SQL查询每个班级在近一年中的第一名学生成绩。场景设定为学校希望获取每个班级近一年内所有学生的成绩信息及每个班级的第一名成绩。通过row_number() over(partition by)函数实现分组排序并选取第一名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL 分组排序后取值

场景前要: 从前有三个班级,每个班级的学生成绩各异,有一天睿智的校长希望知道这一年中,每个班级近一年里所有的学生成绩信息,和查询每个班级近一年里所有第一名的学生成绩信息,故事由此展开:
(老师:不要问为什么个别学生信息有差异,问就是他是主角)

class 班级表

id class_name stu_id
1 先锋班 9527
2 先锋班 444
2 呆呆班 111
2 傻傻班 222

students 学生表

id name sex
111 张三
222 李四
9527 顾帅哥
444 小美

score 成绩表

id stu_id score time
1 111 50 2100-07-22
1 222 60 2100-07-22
1 9527 100 2100-07-22
1 444 99 2100-07-22
1 111 20 2100-06-01
1 222 30 2100-06-01
1 9527 100 2100-06-01
1 444 80 2100-06-01
-- 查询每个班级近一年里所有的学生成绩信息
select 
a.name, 						-- 学生名称
a.sex,  						-- 学生性别
b.class_name as className,		-- 学生班级
c.score,						-- 学生成绩
c."time"						-- 考试时间
from students a 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值