小编典典

如何选择带有group by子句的随机行?

sql

我有下表

SQLFiddle

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

小提琴包括我运行的查询及其运行方式。


阅读 183

收藏
2021-05-05

共1个答案

小编典典

您需要的是一个随机聚合函数。通常,当前的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
2021-05-05