累计GROUP BY大查询

问题描述 投票:0回答:1

我在 BQ 中尝试解决这个问题确实遇到了困难,所以我希望得到一些帮助,如果您花时间发表评论,谢谢。假设我在 Big Query 中有“BASE”,如果我按月分组和计数(DISTINCT ID_CLIENT),我会得到“表 1”,但我想得到类似“表 2”的东西。第一行包含第 1 个月的唯一客户数量,第二行包含第 1 个月和第 2 个月的唯一客户数量。

我不知道是否可以仅使用 GROUP BY 来实现类似的效果,或者我必须在表“BASE”中创建另一列来 GROUP BY 该新变量,或者有一种方法可以在不创建新变量的情况下实现此目的专栏。

Example

google-bigquery
1个回答
0
投票

考虑以下方法

select months, (
    select count(distinct id)
    from unnest(split(id_clients)) id
  ) as count_distinct_clients
from (
  select 
    string_agg('' || month, ' AND ') over win as months,
    string_agg(id_clients) over win as id_clients
  from (
    select month, string_agg(distinct '' || id_client) as id_clients
    from base
    group by month
  )
  window win as (order by month range between unbounded preceding and current row)
) t
order by months

如果应用于您问题中的样本数据 - 输出为

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.