如何使用group by子句选择随机行?

Ali*_*Ali 3 mysql sql random group-by

我有下表

SQLFiddle

我试图做的是选择三个随机图像,但为了确保没有两个图像具有相同的对象,我试图做的是做一个GROUP BY和一个ORDER BY rand()但是失败了它总是给我cat1.jpg,dog1.jpg,box1.jpg(所有图片的路径以1结尾而不是其他图片)

小提琴包括我跑的查询以及它是如何工作的.

dim*_*imm 9

你需要的是一个随机聚合函数.通常在当前的RDBMS中没有这样的功能.

有人问过类似的问题.

所以基本的想法是将元素混合,然后分组,然后为每个组选择每个组的第一行.如果我们修改链接上提供的答案之一,我们就会得到这个答案.

select object_id, name, image_path
from
  (SELECT images.image_path AS image_path, objects.id AS object_id, objects.name
  FROM objects LEFT JOIN images ON images.object_id = objects.id
  ORDER BY RAND()) as z
group by z.object_id, z.name
Run Code Online (Sandbox Code Playgroud)

  • 您的链接似乎转到一个不相关的问题,该问题询问表别名。我一直在尝试使此示例代码正常工作,并使其适应于我的表设置,但每次返回的数据都完全相同。返回的数据是每个分组项目的第一行,而不是随机行。在更高版本的MySQL中,此功能是否已更改? (2认同)