mysql - MySQL中的循环顺序

标签 mysql sorting

具有以下 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/

相关文章:

mysql - JSON_SET 不更新 MySQL 中的空 JSON 字段

javascript - 使用 javascript 将 json 对象转换为排序的 html select 的最佳方法

c# - 尝试使用 c# 按两列对 excel 范围进行排序

c++ - 如何在dev c++中链接mysql?

php - 需要帮助调整选择查询以将 Match/Against 子句更改为 Like 子句

java - 如何对 List/ArrayList 进行排序?

java - 使用compareTo对对象的双向链表进行排序的最佳方法是什么

arrays - For 循环未按正确的顺序返回数组中的项目

php - MySQL查询突然变慢

java - 如何使用逗号从我的数据库表的特定列中拆分值?