Google BigQuery;在外部选择中使用subselect结果;交叉加入

时间:2013-04-02 16:28:52

标签: google-bigquery

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

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;

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

2 个答案:

答案 0 :(得分:1)

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

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

ratio_to_report获取amount,并将其除以所有结果行amount的总和。

答案 1 :(得分:0)

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