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

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

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

select random() as a
     , a as b
     , a as c
     , a as d

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

wgmfuz8q

wgmfuz8q1#

使用with块

with data
 as (select random() as a
    )
select  a as a
       ,a as b
       ,a as c
       ,a as d
  from data
pkmbmrz7

pkmbmrz72#

我想你可以做到:

select . . .
from (select random() as rand) cross join
     . . .

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

相关问题