MySQL分组排序取前N条记录 以及 生成自动数字序列 的SQL

— 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');

INSERT INTO test VALUES  (200,200,’200test_nagios’);

select * FROM (SELECT cid,author,COUNT(*) AS number FROM test GROUP BY cid,author) a   WHERE    N  &gt;(      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><p>结果如下:</p> <pre class="sql">mysql&gt; SELECT * FROM (SELECT cid,author,COUNT(*) AS number FROM test GROUP BY cid,author) a       -&gt; WHERE        -&gt; 3&gt;(      -&gt;     SELECT COUNT(*)       -&gt;     FROM (SELECT cid,author,COUNT(*) AS number FROM test GROUP BY cid,author) b      -&gt;     WHERE a.cid=b.cid AND a.number<b.number> )ORDER BY cid,number DESC;  +------+----------------+--------+  | cid  | author         | number |  +------+----------------+--------+  |    1 | test3          |      4 |  |    1 | test2          |      3 |  |    1 | test1          |      2 |  |    2 | test33         |      4 |  |    2 | test22         |      3 |  |    2 | test11         |      2 |  |  200 | 200test_nagios |      1 |  +------+----------------+--------+  7 rows in set (0.00 sec)</b.number>

N就是取分组之后的最前面几个判断,N=3就是取前3个

— 生成自动数字序列

SET @ROW=0;  SELECT a.*,(@ROW:=@ROW +1)Rank  FROM test a;

 以上就是MySQL分组排序取前N条记录 以及 生成自动数字序列 的SQL的内容,更多相关内容请关注PHP中文网(www.php.cn)!

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享