如何按周执行sql分组以及创建的用户数>;=这一周(不仅仅是那一周)?
例如:如何按周执行sql分组以及创建的用户数>;=这一周(不仅仅是那一周)?,sql,google-bigquery,Sql,Google Bigquery,例如: | Week | UserId | | ---- | ------ | | 0 | A | | 0 | B | | 0 | C | | 1 | D | | 1 | E | | 1 | F | | 2 | G | | 3 | H | | 3 | I | 现在我想要下面的桌子 | Week | Users | | ---- | ------ | |
| Week | UserId |
| ---- | ------ |
| 0 | A |
| 0 | B |
| 0 | C |
| 1 | D |
| 1 | E |
| 1 | F |
| 2 | G |
| 3 | H |
| 3 | I |
现在我想要下面的桌子
| Week | Users |
| ---- | ------ |
| 0 | 9 |
| 1 | 6 |
| 2 | 3 |
| 3 | 2 |
现在我可以用
SELECT
*
FROM
(week_3_users AS
(
SELECT DISTINCT User_ID
FROM users
WHERE week >= 3
),
week_2_users AS
(
SELECT DISTINCT User_ID
FROM users
WHERE week >= 2
),
week_1_users AS
(
SELECT DISTINCT User_ID
FROM users
WHERE week >= 1
),
week_0_users AS
(
SELECT DISTINCT User_ID
FROM users
WHERE week >= 0
)
SELECT
(SELECT COUNT(*) FROM week_0_users) AS week_0_count,
(SELECT COUNT(*) FROM week_1_users JOIN week_0_users USING (User_ID)) AS week_1_count,
(SELECT COUNT(*) FROM week_2_users JOIN week_0_users USING (User_ID)) AS week_2_count,
(SELECT COUNT(*) FROM week_3_users JOIN week_0_users USING (User_ID)) AS week_3_count
)
这将返回:
| week_0_count | week_1_count | week_2_count | week_3_count |
| ------------ | ------------ | ------------ | ------------ |
| 9 | 6 | 3 | 2 |
但我不想在N个星期内重复这一点
请建议我可以这样做以获得所需的输出您可以使用累计总和:
select week, count(*),
sum(count(*)) over (order by week desc)
from t
group by week
order by week;
但我不想在N个星期内重复这一点。请建议我可以这样做,以获得所需的输出 下面是BigQuery标准SQL
execute immediate (
select 'select ' ||
string_agg('max(if(week =' || week || ',users,null)) week_' || week || '_count', ', ' order by week) || '''
from (
select week, sum(count(*)) over (order by week desc) users
from `project.dataset.users_table`
group by week)'''
from (select distinct week from `project.dataset.users_table`)
);
如果/当应用于示例中的样本数据时-输出为
你试过了吗?这不是你最初要求的吗o) 请不要改变你的问题-在它被回答之后!