0

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 ```
4

1 回答 1

1

子查询只是表达 a 的另一种方式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允许您过滤窗口函数的新子句。

于 2021-06-02T10:20:52.657 回答