【问题标题】:Random order for group of rows in mysqlmysql中行组的随机顺序
【发布时间】:2015-11-23 21:02:58
【问题描述】:

也许这很容易,但我不知道如何正确处理。我有以下表格 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_ids 升序和降序非常容易,但是获取随机分组的结果比我想象的要复杂得多。

当我使用 GROUP BY 或某事时,我不明白。类似的,我肯定每组只有一行。我如何随机排序组,这里有什么技巧???

感谢你们将光明带入黑暗;)

【问题讨论】:

  • 将不同组的随机排列加入您的桌子。请注意,对于表/列标识符,组是一个愚蠢的词
  • 你说得对,但这只是一个例子。我改变了它。你能解释一下你的评论吗?

标签: mysql random group-by sql-order-by


【解决方案1】:

例如:

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 by gr_id 子句,以防止连接在外部选择查询中创建额外的行。我认为这是“distinct”子句之后的内容,但是由于第二个 rand() 列,它实际上并没有捕获不同的 gr_id 值。
  • @mkonji 您发现此答案存在缺陷。我会考虑一个适当的方法来解决它。
【解决方案2】:

ORDER BY RAND() 应该适合你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-18
    • 2012-11-19
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2020-03-20
    • 2017-02-11
    • 1970-01-01
    相关资源
    最近更新 更多