视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
分组后查找每组的前N条记录语句_MySQL
2020-11-09 18:20:31 责编:小采
文档


bitsCN.com
分组后查找每组的前N条记录语句 Java代码 考你一条sql语句 如有表 student id name age class 1 张1 15 1 2 张2 15 1 3 张3 15 1 4 张4 15 2 5 张5 15 2 6 张6 15 2 7 张7 15 3 8 张8 15 3 9 张9 15 3 10 张10 15 5 11 张11 15 5
现在想得到每个班级的前2名学生资料 根据题意是,按class分组,然后取id靠前的两名,相信大多数人都能想到基本组合: SELECT a.* FROM student a ORDER BY a.class, a.id; 另加:Limit 0,2来配合。 (注:MYSQL 中没有top n的写法,取代的是LIMIT。) Limit 0,n只能取到最前的n位,但如何能取到每个班的前两位呢,就无从下手了。 下面我来具体分析一下这题的解法: 1、获取每个class的前两位: SELECT a.* FROM student a WHERE ( SELECT COUNT(*) FROM student WHERE class = a.class AND id < a.id ) < 2 #遍历所有记录,然后取该条记录与同班中的所有记录比较,只有当班上不超过两个人(含两个人)比该记录id小的话,该记录才被认定为该记录id排名前2,然后显示出来。 2、当获取所有合格的数据有,按class与id排序: 在最后添加: ORDER BY a.class, a.id; 最终结果: SELECT a. * FROM student a WHERE ( SELECT COUNT( * ) FROM student WHERE class = a.class AND id < a.id ) <2 ORDER BY a.class, a.id LIMIT 0 , 30; 遍历所有记录,然后取该条记录与actionid中的所有记录比较,只有id不超过1个比该记录id小的话,该记录才被认定为该记录id为最大id,然后显示出来。 Java代码 SELECT a.* FROM messagesend a WHERE ( SELECT COUNT( * ) FROM messagesend t WHERE t.actionid = a.actionid AND id < a.id ) <1
bitsCN.com

下载本文
显示全文
专题