mysql中一组行的随机顺序

mysql中一组行的随机顺序,mysql,random,group-by,sql-order-by,Mysql,Random,Group By,Sql Order By,也许这很容易,但我不知道如何正确处理。我有下表t1和这些数据: ----------------- | id | gr_id | ----------------- | 1 | a | | 2 | a | | 3 | b | | 4 | b | | 5 | c | | 6 | c | | 7 | d | | 8 | d | ----------------- 我

也许这很容易,但我不知道如何正确处理。我有下表t1和这些数据:

-----------------
| id    | gr_id |
-----------------
| 1     | a     |
| 2     | a     |
| 3     | b     |
| 4     | b     |
| 5     | c     |
| 6     | c     |
| 7     | d     |
| 8     | d     |
-----------------
我想随机获得如下gr_ID:

-----------------
| id    | gr_id |
-----------------
| 3     | b     |
| 4     | b     |
| 5     | c     |
| 6     | c     |
| 7     | d     |
| 8     | d     |
| 1     | a     |
| 2     | a     |
-----------------
获得有序的gr_ID上升和下降是非常容易的,但是获得随机分组的结果,比我想象的要复杂得多

我不明白,当我使用GROUP BY或类似的东西时,我肯定每组只有一行。如何随机分组,这里有什么诀窍

谢谢你们把光明带入黑暗;)

按兰德订购()
应该适合您。

例如:

SELECT x.*
  FROM my_table x
  JOIN 
     ( SELECT DISTINCT gr_id
                     , RAND() rnd 
                  FROM my_table
     ) y
    ON y.gr_id = x.gr_id
 ORDER 
    BY y.rnd
     , x.id;

将不同组的随机排列加入到您的表中。请注意,对于表/列标识来说,group是一个愚蠢的词。你是对的,但它只是一个例子。我改了。你能解释一下你的评论吗?哇,太好了。我现在不理解它,但它是有效的。这让我非常接近我所需要的,但我必须在连接中添加gr_id子句,以防止连接在外部select查询中创建额外的行。我认为这就是“distinct”子句的目的,但由于第二列rand()的原因,它实际上没有捕获不同的gr_id值。@mkonji您在这个答案中发现了一个缺陷。我会考虑一个合适的方法来修复它。