当前位置: 首页 > 面试题库 >

在行之间随机排列一列

边明煦
2023-03-14
问题内容

如何有效地洗净大型(1m至5m记录)表的内容?已知该列具有唯一值,但是您可以假定为此删除了所有约束。我之所以头痛,主要是因为我正在更新选择的同一列。我的目标是使用PL
/ SQL做到这一点,以便我可以以编程方式采取其他措施,例如记录或更新其他表。

**Original table:**
+----+-----------+
| id | fname     |
+----+-----------+
|  1 | mike      |
|  2 | ricky     |
|  3 | jane      |
|  4 | august    |
|  6 | dave      |
|  9 | J茅r么me    |
+----+-----------+

**Possible output:**
+----+-----------+
| id | fname     |
+----+-----------+
|  1 | dave      |
|  2 | jane      |
|  3 | mike      |
|  4 | ricky     |
|  6 | J茅r么me    |
|  9 | august    |
+----+-----------+

我最近的尝试是创建一个使用的游标,over (order by dbms_random.value)并尝试基于行数进行合并或更新。也许我可以通过创建一个临时表来解决修改自我约束的问题?我相当有信心Oracle可以采用一些特殊的方法来做到这一点,但是我的SQL能力仅限于基本的CRUD命令。

完整的解决方案在这里,基于戈登的答案:

merge into t
using (
select t.id, t2.name
from (select t.*, rownum as seqnum
      from t
     ) t join
     (select t.*, row_number() over (order by dbms_random.value) as seqnum
      from t
     ) t2
     on t.seqnum = t2.seqnum
) src
on (t.id = src.id)
when matched then update set t.name = src.name;

问题答案:

您可以使用随机行号进行自我连接:

select t.id, t2.name
from (select t.*, row_number() over (order by dbms_random.value) as seqnum
      from t
     ) t join
     (select t.*, row_number() over (order by dbms_random.value) as seqnum
      from t
     ) t2
     on t.seqnum = t2.seqnum;

实际上,您不需要将两者都随机化:

select t.id, t2.name
from (select t.*, rownum as seqnum
      from t
     ) t join
     (select t.*, row_number() over (order by dbms_random.value) as seqnum
      from t
     ) t2
     on t.seqnum = t2.seqnum;


 类似资料:
  • 问题内容: 如何将下面的函数转换为?当前出现错误。 问题答案: 返回,它是描述两个集合索引之间距离的类型。必须为,但不必为,可以与有所不同。因此,不可能创建范围。 一个解决方案是使用和代替and : 另一个优点是,它也可以与数组 切片 正确配合使用 (第一个元素的索引不一定为零)。 请注意,根据新的“ Swift API设计指南”,它 是变异随机播放方法和返回数组的非变异对应方法的“适当”名称:

  • 随机排列指定数组的值,返回一个新的数组。 使用 Fisher-Yates 算法 对数组元素进行重新排序。 const shuffle = ([...arr]) => { let m = arr.length; while (m) { const i = Math.floor(Math.random() * m--); [arr[m], arr[i]] = [arr[i],

  • 问题内容: 我一直在谷歌上寻找答案,但似乎找不到一个万无一失的东西,而且真的负担不起将其弄乱(进入生产站点)。 我所拥有的是具有20多个过滤器的高级搜索,它返回一个包含ID和Distance的数组。我需要做的是将这些结果混洗以每次随机显示。目前我得到的数组是: 我需要做的是每次都对它们进行随机化或排序,但要保持id和距离对,即: 谢谢 :) 问题答案: 在第一个用户后下的文件: 在保留键,值对的同

  • 大家好, 我正在使用电子邮件验证软件来检查数据集中的电子邮件是否有效。如何使用 pandas 将名为“有效电子邮件”的列中的电子邮件与“电子邮件”列中的电子邮件匹配,并返回“Good_Email”中的值?需要明确的是,结果可能看起来像 此外,让我们假设名为“有效电子邮件”的列将与“电子邮件”列相比随机排序,并且可以缩短长度。(即与示例中所示完全相同)。 提前感谢!

  • 本文向大家介绍JavaScript数组随机排列实现随机洗牌功能,包括了JavaScript数组随机排列实现随机洗牌功能的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript数组随机排列实现随机洗牌功能的方法。分享给大家供大家参考。具体分析如下: 这段JS代码可以对数组内的元素进行随机排列,这个非常有用,比如我们在玩扑克牌的时候可以让扑克牌进行排列,也就是电脑洗牌。 希望本文所

  • 问题内容: 我有一个非常大的矩阵A,具有N行和M列。我想基本上做以下操作 但又快又有效。(M和N都很大,这只是更大的外部循环中的内部循环。) 更多上下文:我正在尝试对相关矩阵实施置换测试(http://en.wikipedia.org/wiki/Resampling_%28statistics%29)。我的数据很大,我很不耐烦。如果有人知道实现这种测试的快速方法,我也将不胜感激! 我是否希望避免循