`

mysql 取每组前几条记录

阅读更多

一、对分组的记录取前N条记录:例如:取每组的前3条最大的记录

1.用子查询:
SELECT * FROM tableName a  WHERE 3>
(SELECT COUNT(*) FROM tableName b WHERE b.id=a.id AND b.cnt>a.cnt)
ORDER BY a.id,a.account DESC
 
2.用exists半连接:
SELECT * FROM tableName a  WHERE EXISTS
(SELECT COUNT(*) FROM tableName b WHERE b.id=a.id AND a.account<b.cnt HAVING COUNT(*)<3)
ORDER BY a.id,a.cntDESC
 
二、同理可以取组内最小的N条记录:例如:取每组的前3条最小的记录
1、子查询
SELECT * FROM tableName a  WHERE 3>
(SELECT COUNT(*) FROM tableName b WHERE b.id=a.id AND b.cnt<a.cnt)
ORDER BY a.id,a.cnt DESC
 
2、用exists:
SELECT * FROM tableName a  WHERE EXISTS
(SELECT COUNT(*) FROM tableName b WHERE b.id=a.id AND a.cnt>b.cnt HAVING COUNT(*)<3)
ORDER BY a.id,a.cnt DESC
 
 
分享到:
评论

相关推荐

    mysql分组取每组前几条记录(排名) 附group by与order by的研究

    –按某一字段分组取最大(小)值所在行的数据 代码如下: /* 数据如下: nameval memo a 2 a2(a的第二个值) a 1 a1–a的第一个值 a 3 a3:a的第三个值 b 1 b1–b的第一个值 b 3 b3:b的第三个值 b 2 b2b2b2b2 b 4 b4b4 b ...

    Mysql取分组后的每组第一条数据

    Mysql取分组后的每组第一条数据 gruop by 分组后 进行 order by mysql会按照 先分组后排序的形式进行输出 并不能做到每组中的第一条数据取出。 我的思路是 : 先将要查询的数据表转换成已经排序的临时表 在进行 分组...

    MySQL获取所有分类的前N条记录

    本文给大家分享的是使用mysql实现获取所有分类的前N条记录的方法,本文给出了3个示例,有需要的小伙伴可以参考下。

    mysql使用GROUP BY分组实现取前N条记录的方法

    主要介绍了mysql使用GROUP BY分组实现取前N条记录的方法,结合实例形式较为详细的分析了mysql中GROUP BY分组的相关使用技巧,需要的朋友可以参考下

    MySql分组后随机获取每组一条数据的操作

    思路:先随机排序然后再分组就好了。 1、创建表: CREATE TABLE `xdx_test` ( `id` int(11) NOT NULL, `name` varchar(255) DEFAULT NULL, `class` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ...

    MySQL命令大全

    例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为的名为Tom的成绩为.45, 编号为 的名为Joan 的成绩为.99,编号为 的名为Wang 的成绩为.5. mysql&gt;insert into MyClass values(1,’Tom’,96.45),(2,’Joan...

    MYSQL常用命令大全

    例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为1的名为Tom的成绩为96.45, 编号为2 的名为Joan 的成绩为82.99,编号为3 的名为Wang 的成绩为96.5. mysql&gt; insert into MyClass values(1,'Tom',96.45),(2,...

    mysql数据库的基本操作语法

    Ø 常用查询 MySQL结束符是“;”结束。 1、 显示所有数据库 show databases; 2、 删除数据库 drop database dbName; 3、 创建数据库 create database [if not exists] dbName;...可以完成单条记录、多条记录、单表...

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

    不加条件,那么就只取每个分组的第一条。 如果想看分组的内容,可以加groub_concat [sql] view plain copy select STU_SEX,group_concat(STU_NAME) from STUDENT group by STU_SEX; 3.2、一般情况下group需与...

    存储图数据的数据库FlockDB.zip

    ) 当一条边被“删除”,这条记录并没有从MySQL中真正删除,而是标记为“删除”状态,这会影响到主键值(一个由源ID-source id,状态-position,位置-position构成的组合键)。类似的,用户账户被删除时,他们所有的边...

    ORACLE,mysql,sqlserver,sybase数据库装文本软件

    每条记录结尾的分隔符,默认是 \r\n回车换行符,支持前面-c参数说的转义符 oracle例子: 登陆scott用户,裝载a.txt的逗号分隔的gbk编码文本内容到scott.emp java -jar xxx.jar -i 127.0.0.1 -p 1521 -s ora10 -u ...

    经典全面的SQL语句大全

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

    PHP分页显示制作详细讲解

    每页多少条记录($PageSize)? 当前是第几页($CurrentPageID)? 现在只要再给我一个结果集,我就可以显示某段特定的结果出来。 至于其他的参数,比如:上一页($PreviousPageID)、下一页($NextPageID)、总页数...

    MySQL数据库如何做好优化

    碰到过好几次这样的题目,可每次都...表的主索引应该尽可能的短,这样的话每条纪录都有名字标志且更高效。  (5).只创建确实需要的索引。索引有利于检索记录,但是不利于快速保存记录。如果总是要在表的组合字段上做搜

    2009达内SQL学习笔记

    如果想在多个列上进行排序,必须对每个列指定DESC关键字。 升序是默认的,可不写,但降序必须写。 六、WHERE子句,选择、过滤 其后只能跟逻辑语句,返回值只有ture或false 如: select last_name,salary from s...

    常用SQL 语句大全

    14、前10条记录 15、选择每组中的最大数 第三部分、 技巧 1、True/False的使用 2、收缩数据库 3、压缩数据库 dbcc shrinkdatabase(dbname) 4、转移数据库给新用户以已存在用户权限 5、检查备份集 6、修复...

    Discuz! 3.1.2 商业版

    同时具有自我尺寸控制技术,各种记录自动保存最新的 500 条,即使管理员也无法删除各种记录,犹如黑匣子般提供最可靠的安全保证. Discuz! 能有效处理页面格式,保证页面及表格的完整性.安全检查应用于每一个Discuz! 代码...

    php网络开发完全手册

    15.3.5 获得结果集中的某一条记录 244 15.3.6 逐行获取结果集中的每一条 15.3.6 记录 245 15.3.7 结果集的分页 248 15.3.8 用户动态添加记录 249 15.3.9 用户动态更新记录 251 15.3.10 用户动态删除记录 253 15.4 ...

Global site tag (gtag.js) - Google Analytics