问题描述
LEFT OUTER JOIN 不能在没有连接两侧字段相等的条件下使用。
为什么在运行以下查询时会收到上述 BQ 错误消息?我没有使用任何左外连接。谢谢!
SELECT *
FROM
(SELECT
*,(select sum(transaction_amount) from `analytics-111.tmp.coll` where transaction_date_est <= mq.transaction_date_est) RunningTotal
FROM `analytics-111.tmp.coll` mq) mq2
WHERE mq2.RunningTotal < 1000 ```
解决方法
子查询只是表达 left join
的另一种方式。优化器在重写查询后识别出问题——并且错误消息不知道原始代码是 LEFT JOIN
还是相关子查询。错误消息可以修复。
令人高兴的是,您可以使用累积总和来计算:
SELECT mq.*,SUM(mq.transaction_amount) OVER (ORDER BY transaction_amount) as RunningTotal
FROM `analytics-111.tmp.coll` mq
QUALIFY mq.RunningTotal < 1000;
请注意,这使用了新的 QUALIFY
子句,它允许您过滤窗口函数。