mysql分组排序取前N条记录的最简洁的单条sql

原创 2011年01月12日 18:04:00

-- mysql分组排序取前N条记录的最简洁的单条sql。
use test;
drop table if exists test;
create table test (
  id int primary key,
  cid int,
  author varchar(30)
) engine=myisam;
insert into test values 
(1,1,'test1'),
(2,1,'test1'),
(3,1,'test2'),
(4,1,'test2'),
(5,1,'test2'),
(6,1,'test3'),
(7,1,'test3'),
(8,1,'test3'),
(9,1,'test3'),
(10,2,'test11'),
(11,2,'test11'),
(12,2,'test22'),
(13,2,'test22'),
(14,2,'test22'),
(15,2,'test33'),
(16,2,'test33'),
(17,2,'test33'),
(18,2,'test33');

--
select * from (select cid,author,count(*) as number from test group by cid,author) a
where 
2>(
    select count(*)
    from (select cid,author,count(*) as number from test group by cid,author) b
    where a.cid=b.cid and a.number<b.number
)order by cid,number desc;

相关文章推荐

MySQL分组排序取前N条记录以及生成自动数字序列--group by 后 limit 外加 rownumber

同事提了一个需求,要求按照某列分组,然后将各组的前几条抽取出来。 表结构 CREATE TABLE `total_freq_ctrl` ( `time` int(10) unsigned NOT ...
  • ylqmf
  • ylqmf
  • 2014年09月02日 14:46
  • 27391

[MySQL] 分组排序取前N条记录以及生成自动数字序列,类似group by后 limit

前言:        同事的业务场景是,按照cid、author分组,再按照id倒叙,取出前2条记录出来。        oracle里面可以通过row_number() OVER (PARTITIO...
  • mchdba
  • mchdba
  • 2014年09月10日 22:50
  • 10265

[MySQL] 分组排序取前N条记录以及生成自动数字序列,类似group by后 limit

前言:         同事的业务场景是,按照cid、author分组,再按照id倒叙,取出前2条记录出来。         oracle里面可以通过row_number() OVER (...
  • jumewo
  • jumewo
  • 2015年07月08日 11:05
  • 571

Oracle分组查询取每组排序后的前N条记录

项目中用到Oracle分组查询取每组排序后的前N条记录,group by 只能返回每个组的单条统计。所以用OVER(PARTITION BY)函数,具体详见baidu.com 建个测试表test_ab...

mysql中GROUP BY分组取前N条记录实现

mysql中GROUP BY分组取前N条记录实现 mysql分组,取记录 GROUP BY之后如何取每组的前两位下面我来讲述mysql中GROUP BY分组取前N条记录实现方法。 这是测试表...

mysql学生成绩排名,分组取前 N 条记录

score表:CREATE TABLE `score` ( `student_id` int(10) DEFAULT NULL, `class_id` int(10) DEFAULT NULL...

[mysql] 先按某字段分组再取每组中前N条记录

From: http://blog.chinaunix.net/uid-26729093-id-4294287.html 请参考:http://bbs.csdn.net/topics/3300212...

MySQL SQL Tuning:Profile定位单条QUERY性能瓶颈

MySQL SQL Tuning:Profile

高性能的MySQL(2)单条SQL性能

实际应用中,分析单条查询SQL性能,有3种方法:show status、show profile和慢查询日志。 一、使用SHOW PROFILE 1、默认是禁用的,在会话中开启 ...

sql分组排序取top n

数据库查询*分组排序 要求:按照课程分组,查找每个课程最高的两个成绩。 数据文件如下: 第一列no为学号,第二列course为课程,第三列score为分数 mysql> select * from l...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql分组排序取前N条记录的最简洁的单条sql
举报原因:
原因补充:

(最多只允许输入30个字)