【发布时间】:2022-02-21 17:42:52
【问题描述】:
我有一个表格,其中包含有关特定版本的每个用户级别的信息。假设它的名称是 user_level_advanced。
| version | user_id | level |
|---|---|---|
| 0.9.3 | 1 | 2 |
| 0.9.5 | 2 | 3 |
| 0.9.3 | 3 | 4 |
| 0.9.3 | 4 | 5 |
并且我想计算每个级别的升级次数,以便每个用户都应考虑低于其当前级别的级别。对于上表,结果应该是这样的。
| version | level | advanced_count |
|---|---|---|
| 0.9.3 | 1 | 3 |
| 0.9.3 | 2 | 3 |
| 0.9.3 | 3 | 2 |
| 0.9.3 | 4 | 2 |
| 0.9.3 | 5 | 1 |
| 0.9.5 | 1 | 1 |
| 0.9.5 | 2 | 1 |
| 0.9.5 | 3 | 1 |
with user_level_advanced as(
select
"0.9.3" as version, 1 as user_id, 2 as level_advanced_max
union all
select "0.9.5" as version, 2 as user_id, 3 as level_advanced_max
union all
select "0.9.3" as version, 3 as user_id, 4 as level_advanced_max
union all
select "0.9.3" as version, 4 as user_id, 5 as level_advanced_max
),
user_grouped_by as
(
select version, level_advanced_max, count(*) as level_advanced_count
from user_level_advanced
group by version, level_advanced_max
)
select version,
level_advanced_max,
sum(level_advanced_count) over(partition by version order by level_advanced_max asc rows between current row and unbounded following)
from user_grouped_by
我使用这个查询来计算它,但它有一个缺陷,如果 user_level_advanced 表中缺少一个级别,那么结果表也会丢失它。感谢您的帮助。
| version | level | advanced_count |
|---|---|---|
| 0.9.3 | 2 | 3 |
| 0.9.3 | 4 | 2 |
| 0.9.3 | 5 | 1 |
| 0.9.5 | 3 | 1 |
【问题讨论】:
-
将结果留给列举了所有可能级别的表格。
标签: sql group-by google-bigquery