mysql分组取前N记录

时间:2022-03-24 00:42:14

http://blog.csdn.net/acmain_chm/article/details/4126306

http://bbs.csdn.net/topics/390958705

 

1

我只用到了其中的特殊形式,就是 分组取最新的一条记录:

select *
from (select * from Table1 order by Score desc) t
group by ClsNo

利用的是 group by 只取第一条记录需要用子查询先把需要的记录排序到第一位

 

2 下面这几个都是利用子查询验证当前记录是否满足前n这个条件

select * 
from Table1 a
where not exists (select 1 from Table1 where ClsNo=a.ClsNo and Score>a.Score);

这个是利用子查询先查出小于最高值的记录,再排除出最高记录(感觉绕了一圈)

 

3 原理类似,利用子查询查找排序前n位的记录id并比较

where id in( select id from tb1 where cataid = a.cataid order by score limit 0,10)

所用的msyql不支持:limit 在 in语句中不被支持

 

4 原理类似,子查询查找小于当前排名的记录数,必须小于n才行

where 2 > ( select count(*) from tb1 where bid = a.bid and cid < a.cid )