具有以下 Foo
表:
id | name | group
===|=========|======
1 | "John" | 1
2 | "Paul" | 1
3 | "Marry" | 1
4 | "Josh" | 1
5 | "Mike" | 2
6 | "Kevin" | 2
7 | "Ramon" | 2
8 | "Kim" | 2
9 | "Henry" | 3
10 | "Susan" | 3
11 | "Greg" | 3
12 | "Julie" | 3
我想选择它在 group
字段上有循环顺序。
例如,当我想选择 6 行时,查询应该返回:
id | name | group
===|=========|======
1 | "John" | 1
5 | "Mike" | 2
10 | "Henry" | 3
2 | "Paul" | 1
6 | "Kevin" | 2
11 | "Susan" | 3
重要 - 表中有无限的group
,因此使用CASE
或任何冗长的函数是没有意义的。
这可以使用 MySQL
吗?
最佳答案
DROP TABLE IF EXISTS foo;
CREATE TABLE foo
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,name VARCHAR(12) NOT NULL UNIQUE
,seq INT NOT NULL
);
INSERT INTO foo VALUES
(1 ,"John" ,1),
(2 ,"Paul" ,1),
(3 ,"Marry" , 1),
(4 ,"Josh" , 1),
(5 ,"Mike" , 2),
(6 ,"Kevin" , 2),
(7 ,"Ramon" , 2),
(8 ,"Kim" , 2),
(9 ,"Henry" , 3),
(10 ,"Susan" , 3),
(11 ,"Greg" , 3),
(12 ,"Julie" , 3);
SELECT x.*
FROM foo x
JOIN foo y
ON y.seq = x.seq AND y.id <= x.id
GROUP
BY x.id
ORDER
BY COUNT(*),seq LIMIT 6;
+----+-------+-----+
| id | name | seq |
+----+-------+-----+
| 1 | John | 1 |
| 5 | Mike | 2 |
| 9 | Henry | 3 |
| 2 | Paul | 1 |
| 6 | Kevin | 2 |
| 10 | Susan | 3 |
+----+-------+-----+
关于mysql - MySQL中的循环顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28025087/