BigQuery中含EXTRACT日期的PARTITION BY函数报错求助
解决BigQuery中PARTITION BY引用未分组/聚合列的报错
问题原因
报错的核心是:分组(GROUP BY)操作完成后,原始表的date列已经不在分组结果集中——它既没有被作为分组字段,也没有被聚合函数处理。窗口函数DENSE_RANK()的PARTITION BY子句里直接引用EXTRACT(MONTH FROM date),本质还是在调用未被分组/聚合的原始date列,这违反了BigQuery的分组后字段使用规则。你尝试的Trunc、format_date函数没解决问题,是因为这些操作依然依赖原始date列,没有改变字段未被分组/聚合的本质。
解决方案
直接使用分组后的字段别名month作为窗口函数的PARTITION BY依据即可。分组后的month已经是每个组对应的月份值,和EXTRACT(MONTH FROM date)的结果完全一致,且属于分组结果集的合法字段。
修正后的SQL
SELECT EXTRACT(MONTH FROM date) month, country_name, SUM(installs) total_installs, DENSE_RANK() OVER(PARTITION BY month ORDER BY SUM(installs) DESC) as ranking FROM `tableA` WHERE EXTRACT(year FROM date) = 2022 GROUP BY month, country_name ORDER BY month;
内容的提问来源于stack exchange,提问作者Ihsan Mercan
相关产品推荐
相关产品推荐

