[英]Selecting multiple sets of rows with a single sql query
我有一个问题表,如此...
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个来自任何教学大纲的正确数量的问题。
这会起作用,但会很慢:
SELECT * FROM questions WHERE difficulty='easy' ORDER BY RAND() LIMIT 5;
更好的方法是首先选择5个ID,然后检索与这些ID相对应的行。 选择ID本身可以使用WHERE ID> RAND(0,MAX(ID))来完成,但如果存在间隙,那么您的数据将会出现偏差。
这里讨论了一个更好的替代方案,但需要更多的努力: 来自Sql数据库的简单随机样本
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.