我正在创建一些考试软件,我必须为每个学生挑选随机问题,每个科目的章节都有一定数量的问题。
因此,例如,数学科目分为12章,我想要50个随机问题,每章至少有3个问题。
到目前为止,我有以下查询,它给了我50个随机问题。
SELECT TOP 50 Q.ID, Q.Subject_name, Q.Chapter
FROM Questions Q
WHERE 50 >= RAND() * (SELECT MAX(25) FROM Questions Q)
答案 0 :(得分:3)
您可以使用ROW_NUMBER为每章的每个问题生成一个序号。除此之外,要获得随机行,您可以为每行生成NEWID,可用于对行进行排序:
SELECT TOP 50 Q.ID, Q.Chapter ,
ROW_NUMBER() OVER(PARTITION BY Chapter ORDER BY NEWID()) AS Row
FROM questions Q
ORDER BY Row
每次运行时,您将获得50个随机行,这些行均匀地分布在章节中。