今天看了一个帖子,讲的是数据库随即抽取,以前没接触过,所以整理了下做个笔记。
newid()是SQL SERVER中的函数,创建 uniqueidentifier 类型的唯一值,主要用于随机抽取:
select top n * from tb oder by newid()
对应的,mysql中用rand(),oracle用sys_guid()。
这个常常用于考试系统的随机出题。
例 从题库随机抽出20道题:
type:类型1的6道,2的7道,3的7道;
difficulty:难度1的8道,2的12道;
distinguish:区分1的13道,2的7道
法一:汤姆克鲁斯 提出
select top 6 * from tb where type=1 and difficulty=1 and distinguish=1 oder by newid()
union all
select top 2 * from tb where type=2 and difficulty=1 and distinguish=1 oder by newid()
union all
select top 5 * from tb where type=2 and difficulty=2 and distinguish=1 oder by newid()
union all
select top 7 * from tb where type=2 and difficulty=2 and distinguish=2 oder by newid()
此法查找速度快,但是是根据自己组合的类型,不是真正的随机。
法二:sql2015 提出
create table #tb(
id int ,
[type] int,
[difficurity] int,
[distinguish] int);
insert into #tb select