我有一个问题表,如此......
id |问题|回答|教学大纲|困难
我想创建一个SQL语句,当难度很容易时,为每个不同的教学大纲随机选择5个问题。
所以如果有4个教学大纲,我会有20个问题。
我在想这样的事情......
SELECT
*
FROM
questions
WHERE
difficulty='easy'
AND
syllabus
IN
(
SELECT DISTINCT
syllabus
FROM
questions
WHERE
difficulty='easy'
)
LIMIT
(5*
(
SELECT
COUNT(DISTINCT syllabus)
FROM
questions
WHERE
difficulty='easy'
)
但这不会从每个不同的教学大纲中返回5只来自任何教学大纲的正确数量的问题。
答案 0 :(得分:1)
这可行,但会非常慢:
SELECT * FROM questions WHERE difficulty='easy' ORDER BY RAND() LIMIT 5;
更好的方法是首先选择5个ID,然后检索与这些ID相对应的行。选择ID本身可以使用WHERE ID>来完成。 RAND(0,MAX(ID)),但如果有间隙,那么您的数据将会出现偏差。
此处讨论了更好的替代方案,但需要更多努力:Simple Random Samples from a Sql database