我有查询结果到一个行表,我需要在后续计算中得到这个结果。这是非工作简化示例(仅描述我想要实现的目标):
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;
但不确定这是否是最好的方法...
答案 0 :(得分:1)
使用最近公布的ratio_to_report()窗口函数:
SELECT RATIO_TO_REPORT(amount) OVER() AS z
FROM [...]
ratio_to_report
获取amount
,并将其除以所有结果行amount
的总和。
答案 1 :(得分:0)
您找到的方式(本质上是使用虚拟键的交叉连接)是我知道进行此查询的最佳方式。我们已经考虑过添加一个显式的交叉连接运算符,以便更容易看到如何执行此操作,但是如果没有正确完成交叉连接会变得昂贵(例如,如果在两个大表上完成可以创建n ^ 2个结果)。