MYSQL将数据排序为模式

MYSQL将数据排序为模式,mysql,sorting,Mysql,Sorting,不确定这是否可能 考虑到MYSQL中的这些数据: AAA BBB BBB CCC AAA CCC DDD DDD 如何返回按如下模式排序的结果集: AAA BBB CCC DDD AAA BBB CCC DDD 您可以为此使用变量: SELECT mycol FROM ( SELECT mycol, @rnk := IF(@col = mycol, @rnk + 1, IF(@col := mycol, 1, 1)) AS

不确定这是否可能

考虑到MYSQL中的这些数据:

AAA
BBB
BBB
CCC
AAA
CCC
DDD
DDD
如何返回按如下模式排序的结果集:

AAA
BBB
CCC
DDD
AAA
BBB
CCC
DDD

您可以为此使用变量:

SELECT mycol
FROM (
   SELECT mycol,
          @rnk := IF(@col = mycol, @rnk + 1,
                     IF(@col := mycol, 1, 1)) AS grp
   FROM mytable
   CROSS JOIN (SELECT @rnk := 0, @col := '') AS vars
   ORDER BY mycol) AS t
ORDER BY grp, mycol;

您可以为此使用变量:

SELECT mycol
FROM (
   SELECT mycol,
          @rnk := IF(@col = mycol, @rnk + 1,
                     IF(@col := mycol, 1, 1)) AS grp
   FROM mytable
   CROSS JOIN (SELECT @rnk := 0, @col := '') AS vars
   ORDER BY mycol) AS t
ORDER BY grp, mycol;

如果没有主键,你很可能会进入一个痛苦的世界。我认为这个问题目前的定义还不够明确。所有四个“类别”是否总是有相同数量的记录?若并没有,那个么当你们用完了,比如说,
CCC
记录,但还有很多其他记录时,你们想要的结果是什么?假设这些记录不仅包含此列,而且包含更多,并且具有不同的值,即使使用“类别”-您是否需要按特定顺序使用这些记录,或者匹配
CCC
的记录中哪一个先出现并不重要?我遇到了一个现实问题,包括一个带有主索引的表。我可能把我的问题简单化了。然而,被接受的答案非常适合我的情况。如果没有主键,你很可能会进入一个痛苦的世界。我认为这个问题目前的定义还很模糊。所有四个“类别”是否总是有相同数量的记录?若并没有,那个么当你们用完了,比如说,
CCC
记录,但还有很多其他记录时,你们想要的结果是什么?假设这些记录不仅包含此列,而且包含更多,并且具有不同的值,即使使用“类别”-您是否需要按特定顺序使用这些记录,或者匹配
CCC
的记录中哪一个先出现并不重要?我遇到了一个现实问题,包括一个带有主索引的表。我可能把我的问题简单化了。然而,被接受的答案非常适合我的情况。