Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何按周执行sql分组以及创建的用户数>;=这一周(不仅仅是那一周)?_Sql_Google Bigquery - Fatal编程技术网

如何按周执行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) 请不要改变你的问题-在它被回答之后!