sql - 在 SQL 中排列值

标签 sql oracle permutation

假设我有一个包含两列的表格:

id | value
----------
 1 | 101
 2 | 356
 3 |  28

我需要随机排列值列,以便为每个 id 随机分配现有集合 {101,356,28} 中的新值。我如何在 Oracle SQL 中执行此操作?

这可能听起来很奇怪,但这是一个真正的问题,只是列更多了。

最佳答案

您可以通过将 row_number() 与随机数生成器一起使用,然后连接回原始行来完成此操作:

with cte as (
      select id, value,
             row_number() over (order by id) as i,
             row_number() over (order by dbms_random.random) as rand_i
      from table t
     )
select cte.id, cte1.value
from cte join
     cte cte1
     on cte.i = cte.rand_i;

这保证了排列(即没有原始行的值被使用两次)。

编辑:

顺便说一句,如果原始 id 从 1 开始连续且没有间隙,您可以这样做:

select row_number() over (order by dbms.random) as id, value
from table t;

关于sql - 在 SQL 中排列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25383475/

相关文章:

java - 连接到 oracle 时出错。获取方法 t2cGetCharSet 的 UnsatisfiedLinkError

oracle - 我们如何在存储过程中定义输出参数大小?

oracle - 将字符串转换为十进制 Oracle 数据库

java - 数学排列码?

java - 从 Java 中的列表创建不同的排列

java - 更新语句语法错误

sql - 使用SQL Server 2012将多行插入到临时表中

python - 具有 16 个整数的列表的排列,但仅当满足 4 个条件时

php - 设置从本地主机到服务器的服务器代码

sql - 学校管理系统中科目管理的正确数据库结构