我有一个这样的问题表..
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个问题,而是从任何教学大纲中返回正确的问题数量。
发布于 2011-10-24 23:45:30
这将会起作用,但会非常慢:
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
https://stackoverflow.com/questions/7878203
复制相似问题