返回均匀分布在分组上的随机行

时间:2014-08-05 08:11:54

标签: sql-server tsql sql-server-2005

我正在创建一些考试软件,我必须为每个学生挑选随机问题,每个科目的章节都有一定数量的问题。

因此,例如,数学科目分为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)

1 个答案:

答案 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个随机行,这些行均匀地分布在章节中。

Working SQL Fiddle