查询各科成绩前三名的记录, 不考虑并列的情况;
select
a.course_id as 课程 ID,
a.score as 成绩,
count(a.course_id) as 排名
- from score a left join score b on a.course_id=b.course_id and a.score<=b.score
- group by a.course_id,a.score
- having count(a.course_id)<4
- order by a.course_id,a.score desc;
其中排序方法就是通过同表比对, count(a.course_id) 实际上是统计同一表中有多少个低于 (高于) 该行分数的行, 进而转化为该行的实际排名
来源: http://www.bubuko.com/infodetail-2684233.html