当前位置: 首页 > 面试题库 >

MYSQL从每个类别中选择一个随机记录

白学
2023-03-14
问题内容

我有一个带有Items表的数据库,看起来像这样:

id
name
category (int)

有数十万条记录。每个item可以在7个不同categoriescategories表之一中,对应于一个表:

id
category

我想要一个从每个类别中选择1个随机项目的查询。解决这个问题的最佳方法是什么?我知道使用Order By rand()LIMIT 1用于类似的随机查询,但是我从未做过这样的事情。


问题答案:

此查询以随机顺序返回加入类别的所有项目:

SELECT
c.id AS cid, c.category, i.id AS iid, i.name
FROM categories c
INNER JOIN items i ON c.id = i.category
ORDER BY RAND()

要将每个类别限制为一个类别,请将查询包装在 partial中 GROUP BY

SELECT * FROM (
    SELECT
    c.id AS cid, c.category, i.id AS iid, i.name
    FROM categories c
    INNER JOIN items i ON c.id = i.category
    ORDER BY RAND()
) AS shuffled_items
GROUP BY cid

请注意,当查询同时具有GROUP BYand ORDER BY子句时,将在排序之前执行分组。这就是为什么我使用了两个查询的原因:第一个对结果进行排序,第二个对结果进行分组。

我了解此查询不会赢得任何比赛。我愿意提出建议。



 类似资料:
  • 问题内容: 我有一个数字值数组,我想从该数组中随机选择一个值,然后将其插入变量中。 我不确定您需要查看什么代码。所以, 这是我用来生成13个数字(1-13)并将其插入到数组中的循环。 效果很好,但是现在我需要从该数组中选择2个随机值(然后将其插入变量中,以备后用。 我到过很多网站,已经看到了类似的事情,例如将值插入到数组中,然后用于从数组中选择值,然后从数组中删除它。但是,无论何时我使用它都行不通

  • 问题内容: 如果我有这样的枚举: 随机挑选一个的最佳方法是什么?它不需要是生产质量的防弹产品,但是相当均匀的分配将是不错的选择。 我可以做这样的事情 但是有更好的方法吗?我觉得这是之前已解决的问题。 问题答案: 我唯一建议的是缓存结果,因为每个调用都会复制一个数组。另外,不要每次都创建一个。保持一个。除此之外,您在做什么都很好。所以:

  • 如果我有这样的枚举: 随机挑选的最佳方式是什么?它不需要是生产质量的防弹产品,但一个相当均匀的分布将是很好的。 我可以做这样的事 但是有没有更好的方法呢?我觉得这是以前解决过的问题。

  • 问题内容: 请考虑下表: 实际上,该表具有600,000条记录,但是如示例表中所示,某些已被删除(因此最高的> 600,000)。 可以是,或。 我需要 随机选择 1200条Tweet,每条400条。这可能与一个查询有关吗? 问题答案: 如果(3)的可能值数量有限,则可以通过一组各自具有和的查询轻松完成此操作: 为了将应用于每个组,必须将组括在中。

  • 问题内容: 假设我有一个数组,我想随机选择一个元素。 最简单的方法是什么? 明显的方法是。但是也许有红宝石之类的东西?或者如果不能通过扩展创建这种方法? 问题答案: Swift 4.2及更高版本 推荐的新方法是Collection协议的内置方法:。它返回一个可选参数以避免我以前假设的空情况。 如果不创建数组并且不能保证count> 0,则应执行以下操作: Swift 4.1及以下 只是为了回答您的

  • 假设我有一个数组,我想随机选择一个元素。 最简单的方法是什么? 最明显的方法是数组[随机索引]。但可能有类似ruby的数组。示例 ?或者,如果不是,那么可以使用扩展创建这样的方法吗?