MySQL选择计数为3的随机行

MySQL选择计数为3的随机行,mysql,random,count,having,Mysql,Random,Count,Having,我想从MySQL中随机选择一行,但该行必须在表中出现三次。信不信由你,但实际上我有一个很好的理由想这么做!假设我有一个包含以下数据的表 word wordType house noun house noun house noun car noun car noun car noun floor noun floor noun 我希望我的select语句随机选取一个实例,其中wordType='Non',但单词必须在表中出现三次。因此,结果可能是

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

word    wordType
house   noun
house   noun
house   noun
car     noun
car     noun
car     noun
floor   noun
floor   noun
我希望我的select语句随机选取一个实例,其中wordType='Non',但单词必须在表中出现三次。因此,结果可能是house一次,也可能是car一次,但它是随机的,因此可能多次出现相同的结果,但它永远不会选择floor,因为floor只在表中出现两次

下面是一些示例输出

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;

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

模式MySQL v8.0

问题1

单词 汽车 房屋 汽车
我认为op的结果是基于这样的假设,即他们将执行myquery 3次
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');
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;