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