为什么 BigQuery 在此 CTE 中返回不同的随机数?

问题描述 投票:0回答:1

当我执行以下查询时,我希望结果是两个相同的数字。但这是两个不同的数字。

with t as (SELECT RAND()) 
SELECT * FROM t 
UNION ALL 
SELECT * FROM t;

我正在使用类似的过程来尝试随机化治疗和控制,我认为 CTE 正在存储结果,但它似乎正在存储对函数的引用,并且该函数每次查询时都会重新滚动 rand()稍后在 CTE 链中。为什么数字不一样?

random google-bigquery
1个回答
0
投票

我在 Google 上搜索了“sql cte 何时评估”这一短语,并得到了大量回复。 在每个回复中,信息都是相同的:

SQL 中的公用表表达式 (CTE) 每次被引用时都会进行评估。

这感觉很清楚......如果您在查询中引用 CTE 两次,那么它将可以自由地被评估两次。

© www.soinside.com 2019 - 2024. All rights reserved.