MySQL select 计数为 3 的随机行
MySQL select random row that has a count of 3
我想 select 来自 MySQL 的随机行,但该行必须在 table 中出现三次。信不信由你,但实际上我有充分的理由想要这样做!假设我有一个包含以下数据的 table。
word wordType
house noun
house noun
house noun
car noun
car noun
car noun
floor noun
floor noun
我希望我的 select 语句随机选择一个实例,其中 wordType = 'noun' 但该词必须在 table 中出现三次。所以结果可能一次是房子,下一次可能是汽车,但它是随机的,所以它可能多次是相同的结果,但它永远不会选择地板,因为地板只出现在 table 两次。
这是一些示例输出
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)
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
我想 select 来自 MySQL 的随机行,但该行必须在 table 中出现三次。信不信由你,但实际上我有充分的理由想要这样做!假设我有一个包含以下数据的 table。
word wordType
house noun
house noun
house noun
car noun
car noun
car noun
floor noun
floor noun
我希望我的 select 语句随机选择一个实例,其中 wordType = 'noun' 但该词必须在 table 中出现三次。所以结果可能一次是房子,下一次可能是汽车,但它是随机的,所以它可能多次是相同的结果,但它永远不会选择地板,因为地板只出现在 table 两次。
这是一些示例输出
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)
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 |