SQL:分组查询并取出前N名

该SQL查询从course_score表中选取了与临时表temp匹配的记录。temp表是通过内连接相同课程表并筛选出分数较低的学生,然后按课程和分数分组,只保留那些组内人数少于N的记录。这样可以找出每个课程中得分低于平均人数的特定分数。

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

1.学生成绩表

create table course_score(
    name VARCHAR(255) NOT NULL,
    course VARCHAR(255) NOT NULL,
    score FLOAT(3) NOT NULL
);

2.SQL

select * from course_score, 
(
	select c1.course, c1.score
	from course_score c1, course_score c2  # 两张表内连接
	where c1.course = c2.course and c1.score <= c2.score
	group by c1.course, c1.score # 按 课程类型 和 分数 分组
	having count(*) <= N  # 只保留每一组数量小于等于N的分组
) temp
where course_score.course = temp.course
and course_score.score = temp.score;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值