sql—如何防止随机数在红移生成后在同一查询中更改其值?

20jt8wwn  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(410)

我在用 random() 在redshift sql query中生成一个列,但是,当我在同一个查询中再次使用此列时,这些值与第一次生成的值不同(即每次在同一个查询中再次使用此列时,sql都会生成一个新的随机数),我想知道一旦这个随机数产生,我是否能保持它的值不变?谢谢!
一个简单的例子来解释我的问题:

  1. select random() as a
  2. , a as b
  3. , a as c
  4. , a as d

我希望 a 在上面的查询中,每次使用它时都应该是相同的,但是如果您真的运行上面的查询, a , b , c 以及 d 都不一样。

wgmfuz8q

wgmfuz8q1#

使用with块

  1. with data
  2. as (select random() as a
  3. )
  4. select a as a
  5. ,a as b
  6. ,a as c
  7. ,a as d
  8. from data
pkmbmrz7

pkmbmrz72#

我想你可以做到:

  1. select . . .
  2. from (select random() as rand) cross join
  3. . . .

中的子查询 from 子句只能求值一次。cte有可能是类似的,但我不知道它们是否保证只被评估一次。
也就是说,如果优化器设置不正确,可能会在不同的计算节点上产生不同的值。

相关问题