繁体   English   中英

使用单个sql查询选择多组行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM