【问题标题】:MySQL select random row that has a count of 3MySQL选择计数为3的随机行
【发布时间】:2021-02-21 01:36:56
【问题描述】:

我想从 MySQL 中随机选择一行,但该行必须在表中出现 3 次。信不信由你,但我实际上有充分的理由想要这样做!假设我有一个包含以下数据的表。

word    wordType
house   noun
house   noun
house   noun
car     noun
car     noun
car     noun
floor   noun
floor   noun

我希望我的 select 语句随机选择一个实例,其中 wordType = 'noun' 但该单词必须在表中出现 3 次。所以结果可能一次是房子,下一次可能是汽车,但它是随机的,所以它可能多次是相同的结果,但它永远不会选择地板,因为地板只出现在表格中两次。

这是一些示例输出

myquery = house
myquery = house
myquery = car

我试过了,但是没用

SELECT  SUBSTRING_INDEX(GROUP_CONCAT(word ORDER BY RAND()),',', 1)  AS word
FROM myTable
WHERE wordType ='noun'
HAVING COUNT(*)= 3;

【问题讨论】:

    标签: mysql random count having


    【解决方案1】:

    您可以选择 count(*) 大于 2 的单词,然后随机选择 在外部查询中

    架构 (MySQL v8.0)

    CREATE TABLE wordtable (
      `word` VARCHAR(5),
      `wordType` VARCHAR(4)
    );
    
    INSERT INTO wordtable
      (`word`, `wordType`)
    VALUES
      ('house', 'noun'),
      ('house', 'noun'),
      ('house', 'noun'),
      ('car', 'noun'),
      ('car', 'noun'),
      ('car', 'noun'),
      ('floor', 'noun'),
      ('floor', 'noun');
    

    查询 #1

    SELECT 
        `word`
    FROM wordtable
    WHERE `word` in (
    SELECT 
        `word`
    FROM wordtable
      WHERE `wordType` = 'noun'
    GROUP BY `word`
    HAVING count(`word`) >= 3)
    ORDER BY RAND()
    LIMIT 3;
    
    word
    car
    house
    car

    View on DB Fiddle

    【讨论】:

    • 我认为 op 的结果是基于他们会执行 myquery 3 次的假设
    猜你喜欢
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2011-09-26
    • 1970-01-01
    • 2011-04-16
    • 2013-12-16
    相关资源
    最近更新 更多