【发布时间】:2022-08-18 16:15:42
【问题描述】:
我有三个级别的分组:id、category、subcategory,带有一个名为 order_key 的顺序键。
我想根据是否达到每个 (id, category, subcategory) 的最后一行来应用条件逻辑。我现在的逻辑是这样的:
SELECT
id
, category
, subcategory
, CASE
WHEN ROW_NUMBER() OVER (PARTITION BY id, category, subcategory
ORDER BY order_key)
= COUNT(order_key) OVER (PARTITION BY id, category, subcategory)
THEN -- execute logic #1
ELSE
-- execute logic #2
END
AS result
FROM my_table
我在更长的查询中使用了上面的代码,但它导致了这个错误,所以我希望通过不使用尽可能多的窗口函数来更好地优化它:Resources exceeded during query execution. The query could not be executed in the allotted memory. Peak usage: 133% of limit. Top memory consumer: OVER() clauses: 100%.
有没有办法通过只用一个或 0 个窗口函数更改 CASE WHEN 语句来更有效地解决这个问题?
标签: sql database group-by google-bigquery aggregate-functions