BigQuery中按月份计算各结果占比的技术实现问题
解决BigQuery月度内结果占比计算问题
我来帮你搞定这个百分比计算的问题!你之前的查询里,sum(count(1)) over()计算的是全表所有记录的总数,所以得到的是基于全量数据的占比。要改成按月度内的总量计算,只需要给OVER子句加上按月分区的规则就行。
修正后的查询语句
SELECT CAST(TIMESTAMP_TRUNC(CAST(created_at AS TIMESTAMP), MONTH) AS DATE) AS `month`, result, COUNT(*) * 100.0 / SUM(COUNT(1)) OVER(PARTITION BY `month`) AS percentage FROM table_name GROUP BY 1, 2 ORDER BY 1
关键修改点解释
- 在
OVER()中添加PARTITION BYmonth``,这样SUM(COUNT(1))就会针对每个月份独立计算该月的总记录数,而不是全表总数。 - 每个分组(月份+结果)的记录数除以当月总记录数再乘以100,就得到了该结果在当月的占比百分比。
修正后的输出示例
假设你的数据和之前示例一致,修正后的输出会保持正确的月度占比逻辑:
| month | result | percentage |
|---|---|---|
| 2021-01-01 | 0001 | 50.00 |
| 2021-01-01 | 0000 | 50.00 |
| 2021-02-01 | 0001 | 33.33 |
| 2021-02-01 | 0000 | 33.33 |
| 2021-02-01 | 0002 | 33.33 |
这里的百分比都是基于当月的总记录数计算的:2021年1月总共有2条记录,每个结果各占50%;2021年2月总共有3条记录,每个结果各占约33.33%,完全符合你的需求。
内容的提问来源于stack exchange,提问作者franco pina
相关产品推荐
相关产品推荐

