MySQL之查询

MySQL查询

分组求Top N

案例一:给一张学生成绩表stu_info,包含 id 、stu_name、class_name、score列,求出每个班级排名前三的学生的姓名,班级,分数。

select *            # 1
from stu_info s     # 2
where(              # 3
	select count(*) # 4
	from stu_info s1 # 5
	where s.class_name= s1.class_name and s.score< s1.score # 6
)<3 # 7
order by s.class_name,s.score # 8

解释:
按照 SQL语句额执行顺序:from -> where -> select -> order by
执行第 2 句,选出 s 表中的第一行
执行第 3 句 where,
执行第 5 句,选出 s1 中的第一行
执行第 6 句 where,判断条件是否成立:成立的话返回这一行,不成立查询s1中第二行,依次下去,直到查询完 s1 中的所有行。
执行第 4 句,计算第 6 句返回了多少行
执行第 7 句,当返回的行数小于3时 执行第 1 句,返回第 2 句 中选中的行
否则 ,不返回第 2 句 中选中的行
执行第 8 句,将的得到的表按照 class_name,分数排序 asc
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值