查询分组后每个分组的前几条记录
2012-06-01 00:00
381 查看
在MySQL使用中,经常需要查询每个分组的前几条记录(查询分组后每一个组的前几项),下面写了个简单的例子说明下SQL的写法。简单的表设计如下,要求每个班总分排名最前的前两条数据。
测试表语句如下:
运行以上SQL,得到的表结构如下:
测试表语句如下:
create table test(id int unsigned not null auto_increment primary key,name varchar(10),class varchar(20),score varchar(20)); insert into test(name, class, score) values ('gonn', '6(1)', '299'); insert into test(name, class, score) values ('yyun', '6(1)', '259'); insert into test(name, class, score) values ('lin', '6(1)', '289'); insert into test(name, class, score) values ('mei', '6(1)', '277'); insert into test(name, class, score) values ('xj', '6(2)', '287'); insert into test(name, class, score) values ('zhl', '6(2)', '277'); insert into test(name, class, score) values ('lwjs', '6(2)', '257'); insert into test(name, class, score) values ('lulu', '6(2)', '265');
运行以上SQL,得到的表结构如下:
mysql> SELECT * FROM test; +----+------+-------+-------+ | id | name | class | score | +----+------+-------+-------+ | 1 | gonn | 6(1) | 299 | | 2 | yyun | 6(1) | 259 | | 3 | lin | 6(1) | 289 | | 4 | mei | 6(1) | 277 | | 5 | xj | 6(2) | 287 | | 6 | zhl | 6(2) | 277 | | 7 | lwjs | 6(2) | 257 | | 8 | lulu | 6(2) | 265 | +----+------+-------+-------+ 8 rows in set
方法一
mysql> SELECT a.id,a.name,a.class,a.score FROM test a LEFT JOIN test b on a.class = b.class and a.score方法二
mysql> SELECT * FROM test a WHERE 2 >(SELECT count(*) FROM test WHERE class = a.class and score>a.score) ORDER BY a.class,a.score DESC; +----+------+-------+-------+ | id | name | class | score | +----+------+-------+-------+ | 1 | gonn | 6(1) | 299 | | 3 | lin | 6(1) | 289 | | 5 | xj | 6(2) | 287 | | 6 | zhl | 6(2) | 277 | +----+------+-------+-------+ 4 rows in set
这里列出了多种SQL语句的实现方法,有些是MySQL特有的(Limit, 其它数据库可根据实际更改,比如oracle的rownum,MS SQL SERVER 的 top,..),有时是SQL标准支持的。但效率上和应用的场合或许不同。具体应用时可根据实际表中的记录情况,索引情况进行选择。
本文地址:http://www.nowamagic.net/librarys/veda/detail/1910,欢迎访问原出处。
相关文章推荐
- (转)查询分组后每个分组的前几条记录
- SQL查询每个分组的前N条记录
- SQL实现分组查询取前几条记录
- SQL语句查询每个分组的前N条记录的实现方法
- 使用SQL语句查询每个分组的前N条记录
- SQL语句查询每个分组的前N条记录的实现方法
- [MS SQL]SQL语句查询每个分组的前N条记录的实现方法
- SQL语句:查询出每个分组的前若干条记录
- MySQL分组查询获取每个学生前n条分数记录(分组查询前n条记录)
- [MS SQL]SQL语句查询每个分组的前N条记录的实现方法
- SQL语句:查询出每个分组的前若干条记录
- [MSSQL]语句查询每个分组的前N条记录的实现方法
- Sql分组后取每个组的前几条记录
- [MSSQL]语句查询每个分组的前N条记录的实现方法
- [MySQL]学习笔记- 用户行为表中,查询每个人的一条最新行为(分组 排序 取时间最大的一条记录)
- 查询分组中的前几条记录
- SQL查询每个分组的前N条记录
- 寻找热门查询:搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。
- sql查询分组排行第一的记录