如何在BigQuery GoogleSQL中按产品分组取各产品Top10销售额国家
解决方案:多产品分组取各国销售额Top10
在多产品场景下,直接用LIMIT只能全局限制行数,无法按产品分组筛选。你可以借助BigQuery支持的窗口函数实现需求,以下是修改后的完整查询:
WITH sales_summary AS ( SELECT date, product, country, SUM(total_sales) AS total_sales FROM `international_sales` WHERE date = '2024-10-19' AND total_sales > 0 AND product IN ('Product A', 'Product B') GROUP BY date, product, country ) SELECT date, product, country, total_sales FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY product ORDER BY total_sales DESC) AS sales_rank FROM sales_summary ) WHERE sales_rank <= 10 ORDER BY product, sales_rank;
关键逻辑说明:
- 销售额汇总CTE:
sales_summary完成你原始查询的聚合逻辑,确保每个产品-国家组合的销售额是计算后的总和; - 窗口函数排名:内层查询用
ROW_NUMBER() OVER (PARTITION BY product ORDER BY total_sales DESC),按product分组,每组内按销售额降序生成排名; - 筛选Top10:外层查询过滤掉排名大于10的行,最终得到每个产品销售额最高的前10个国家。
如果需要保留并列排名的情况(比如多个国家销售额相同且均进入前10),可以将ROW_NUMBER()替换为RANK(),这样并列的行会获得相同排名,不会被错误过滤。
内容的提问来源于stack exchange,提问作者Murphstar
相关产品推荐
相关产品推荐

