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 V
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>(
SELECT COUNT(*)
FROM (SELECT cid,author,COUNT(*) AS number FROM test GROUP BY cid,author) b
WHERE a.cid=b.cid AND a.number
)ORDER BY cid,number DESC;
结果如下:
mysql> SELECT * FROM (SELECT cid,author,COUNT(*) AS number FROM test GROUP BY cid,author) a
-> WHERE
-> 3>(
-> 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;
+------+----------------+--------+
| 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;
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn