如果我在 sql (bigquery googleSQL) 中运行以下查询,它将为我提供当前日期每个国家/地区的销售额列表
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')
日期 | 产品 | 国家 | 总销售额 |
---|---|---|---|
2024-10-19 | 产品A | 美国 | 22222 |
2024-10-19 | 产品B | 加拿大 | 111111 |
2024-10-19 | 产品B | 墨西哥 | 333333 |
我希望能够修改此设置,以便我只获得每种产品的前十个最高国家/地区。如果我只查询一种产品,那么就像添加一样简单
order by total_sales desc limit 10;
但由于我试图同时查询多个产品,这让事情变得更加困难。我该如何解决这个问题?
正如 @Paul Maxwell 所评论的,根据您的要求,您可以包含行号计算,如下所示,
row\_number() over(partition by date, product, country order by total\_sales) as rn
然后过滤 where rn <= 10
.
将答案发布为社区 wiki,以造福于将来可能遇到此用例的社区。请随意编辑此答案以获取更多信息。