`

分组后查找每组的前N条记录

 
阅读更多
考你一条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,然后显示出来。

 SELECT a.*
FROM messagesend a
WHERE (
SELECT COUNT( * )
FROM messagesend t
WHERE t.actionid = a.actionid
AND id < a.id
) <1


分享到:
评论

相关推荐

    正则表达式30分钟入门教程

    最重要的是——请给我30分钟,如果你没有使用正则表达式的经验,请不要试图在30秒内入门——除非你是超人 :) ...默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,...

    MySql基本查询、连接查询、子查询、正则表达查询讲解

    having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。 having 子句被限制子已经在SELECT语句中定义的列和聚合...

    经典SQL语句大全

    14、说明:前10条记录 select top 10 * form table1 where 范围 15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)...

    数据库操作语句大全(sql)

    14、说明:前10条记录 select top 10 * form table1 where 范围 15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等....

    sql经典语句一部分

    14、说明:前10条记录 select top 10 * form table1 where 范围 15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)...

    ORACLE之常用FAQ V1.0(整理)

    [Q]怎么样实现分组取前N条记录 13 [Q]怎么设置存储过程的调用者权限 13 [Q]怎么快速获得用户下每个表或表分区的记录数 13 [Q]可以利用utl_smtp包发邮件,以下是一个发送简单邮件的例子程序 14 [Q]可以利用utl_file包...

    orcale常用命令

    如果我们想知道user_indexes表各字段名称的详细含义,可以用下面这条SQL语句: SQL&gt;select column_name,comments from dict_columns where table_name='USER_INDEXES'; 依此类推,就可以轻松知道数据字典的详细...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    每个实例都经作者精心筛选,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。   本书适合PHP的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合PHP程序员参考、查阅。 目 录 目录:...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    每个实例都经作者精心筛选,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。   本书适合PHP的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合PHP程序员参考、查阅。 目 录 目录:...

    SAP MM 配置大全

    3.28 续前定义生产计划组内容 45 定义生产计划接口(补充) 45 3.29 定义订单类型确地区 CORN 46 3.30 定义订单类型相关参数文件 COR4 48 3.31 定义订单的编号范围 CO82 51 3.32 定义生产计划参数文件(流程订单的)...

    大学文献检索资料 DOC

    2.每条记录都必须具有各种检索标识。 3.全部描述记录科学地组织成一个有机的整体。4.能够提供多种检索途径。 三、信息检索工具的职能: 1.报道职能。 2.存储职能。3.检索职能。 四、检索工具的类型: 1.按检索方法...

    软件课程设计 试验报告 代码 演示

    在淘汰人员时,我准备利用一个布尔数组来存放这n个人的状态(是否被淘汰),然后通过一个point"指针"对其进行循环查找。而另定义一个j变量来进行报数操作。不但可以实现在时下最后一个人时输出这个人的编号,还可以在...

    Excel函数活用范例大辞典(全新版).何先军.2015-2(带书签高清文字版).pdf

    本书侧重于函数的实战应用,共分12章,前10章分别介绍了数学函数、统计函数、日期和时间函数、文本函数、逻辑函数、查找和引用函数、财务函数、信息函数以及数据库和三角函数在实战中的应用;第11 章介绍了函数与...

    数据可视化智能软件主要性能指标.doc

    C 支持千万条级别报警记录存储,并方便网络查询; D 支持报警处置与评论,并可根据业务形成报警知识库 E 支持高达10个条件报警判断(H5、H4、H3、HH、HI、LO、LL、L3、L4、L5); F 支持的报警类型有限值报警,偏差...

    正则表达式

    {n, m} 匹配前一项至少n次,但是不能超过m次 {n, } 匹配前一项n次,或者多次 {n} 匹配前一项恰好n次 ? 匹配前一项0次或1次,也就是说前一项是可选的. 等价于 {0, 1} + 匹配前一项1次或多次,等价于{1,} * 匹配前一...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     事务控制语言(Transactional Control Language,TCL),用于维护数据的一致性,包括COMMIT(提交事务)、ROLLBACK(回滚事务)和SAVEPOINT(设置保存点)3条语句 二、 Oracle的数据类型 类型 参数 描述 字符类型...

    Excel 2010函数应用速查手册

    源文件:光盘\源文件\03\034.xlsx 用例6:计算个人所得税(ABS) 源文件:光盘\源文件\03\001.xlsx 用例7:计算每种商品打折后的价格(PRODUCT) 源文件:光盘\源文件\03\015.xlsx 用例8:直角三角形判断(SUMSQ) ...

    Microsoft SQL Server 2008技术内幕:T-SQL查询(第二卷)

    9.3.1 每组中的TOP n 9.3.2 匹配当前值和前一个值 9.3.3 分页 9.4 逻辑转换 9.5 总结 第10章 数据修改 10.1 插入数据 10.1.1 增强的VALUES子句 10.1.2 SELECT INTO 10.1.3 BULK行集提供程序 10.1.4 按最小...

    SQLServer2008技术内幕T-SQL查询包含源代码及附录A

    9.3.1 每组中的TOP n408 9.3.2 匹配当前值和前一个值413 9.3.3 分页416 9.4 逻辑转换422 9.5 总结424 第10章 数据修改425 10.1 插入数据425 10.1.1 增强的VALUES子句425 10.1.2 SELECT INTO426 10.1.3 BULK行集提供...

Global site tag (gtag.js) - Google Analytics