如何随机排列SQL(Oracle)中的数据?

时间:2013-03-11 13:44:52

标签: sql oracle permutation

随机置换数据的最佳方法是什么? 示例:

id col1    col2     col3
1  data11  data12   data13
2  data21  data22   data23
3  data31  data32   data33

我想在col1和col2中随机置换数据,结果将如下:

id col1    col2     col3
1  data31  data22   data13
2  data11  data12   data23
3  data21  data32   data33

1 个答案:

答案 0 :(得分:7)

使用DBMS_RANDOM实现随机性。子查询中的ROW_NUMBER()提供了一个可以在WHERE子句中使用的钩子,否则你将得到一个CROSS JOIN(它不是很随机,可能很大)。

with c1 as ( select col1
                , row_number() over (order by dbms_random.value ) rn
             from your_table )
     , c2 as ( select col2 
                , row_number() over (order by dbms_random.value ) rn
             from your_table )
     , c3 as ( select col3 
                , row_number() over (order by dbms_random.value ) rn
             from your_table )
select c1.col1
       , c2.col2
       , c3.col3
from c1, c2, c3
where c2.rn = c1.rn
and   c3.rn = c1.rn;

为获得最佳效果,请记住使用种子。 Find out more