1

我有一个查询结果到一个行表中,我需要在后续计算中得到这个结果。这是无效的简化示例(只是为了描述我想要实现的目标):

SELECT amount / (SELECT SUM(amount) FROM [...]) FROM [...]

我尝试了一些嵌套的子选择和连接(一个行表与另一个表的交叉连接),但没有找到任何可行的解决方案。有没有办法让它在 BigQuery 中工作?

谢谢,拉德克

编辑:

好的,我找到了解决方案:

select
  t1.x / t2.y as z
from
  (select 1 as k, amount as x from [...] limit 10) as t1
join
  (select 1 as k, sum(amount) as y from [...]) as t2
on
  t1.k = t2.k;

但不确定这是否是最好的方法......

4

2 回答 2

1

使用最近宣布的 ratio_to_report() 窗口函数:

 SELECT RATIO_TO_REPORT(amount) OVER() AS z
 FROM [...]

ratio_to_reportamount, 并将其除以所有结果行amounts 的总和。

于 2013-06-11T16:09:19.397 回答
0

您找到的方式(本质上是使用虚拟键的交叉连接)是我所知道的执行此查询的最佳方式。我们考虑过添加一个显式的交叉连接运算符,以便更容易了解如何执行此操作,但是如果没有正确完成交叉连接可能会变得很昂贵(例如,如果在两个大表上完成可能会产生 n^2 个结果)。

于 2013-04-08T22:20:29.643 回答