Sql 仅使用select生成随机列表
我有以下代码:Sql 仅使用select生成随机列表,sql,oracle,Sql,Oracle,我有以下代码: create table test ( name varchar2(20 byte) ); insert into test values ('Fred'); insert into test values ('Wilma'); insert into test values ('Betty'); insert into test values ('Barny'); commit; select * from test order by dbms_random.ra
create table test
(
name varchar2(20 byte)
);
insert into test values ('Fred');
insert into test values ('Wilma');
insert into test values ('Betty');
insert into test values ('Barny');
commit;
select * from test order by dbms_random.random;
当然,在本例中,select语句将创建一个包含4个条目的随机列表。是否有一种方法可以更改select语句,以便在不使用PL的情况下将列表扩展到4个或4个以下的条目?您可以使用自交叉连接来平方可用的行数,对结果进行随机排序,并获得前X行;假设X小于行数的平方,例如,对于四个源行,交叉连接有16个结果,在本例中,X为10,则您可以得到所需的结果:
select * from (
select t1.name from test t1
cross join test t2
order by dbms_random.value
)
where rownum <= 10;
NAME
--------------------
Betty
Betty
Fred
Betty
Wilma
Betty
Fred
Wilma
Barny
Barny
10 rows selected.
内部查询现在只获取级别<10限制的36行。您将需要使用实际数据量进行测试,并针对合理的结果和性能进行调整。您可以使用自交叉连接来计算可用行数的平方,随机排序结果,并获得前X行;假设X小于行数的平方,例如,对于四个源行,交叉连接有16个结果,在本例中,X为10,则您可以得到所需的结果:
select * from (
select t1.name from test t1
cross join test t2
order by dbms_random.value
)
where rownum <= 10;
NAME
--------------------
Betty
Betty
Fred
Betty
Wilma
Betty
Fred
Wilma
Barny
Barny
10 rows selected.
内部查询现在只获取级别<10限制的36行。您需要使用实际数据量进行测试,并根据合理的结果和性能进行调整。是否要从表test中选择X倍随机行?是-从表test中检索包含随机行的X行选择t.*从测试t,按级别从双连接中选择rownum rn是否要从表测试中选择X倍随机行?是-从表测试中检索包含随机行的X行选择t.*从测试t中,按级别从双连接中选择rownum rn
select * from (
select * from test
connect by level < 10
and prior name = name
and prior dbms_random.value is not null
order by dbms_random.value
)
where rownum <= 10;