我在 BQ 中尝试解决这个问题确实遇到了困难,所以我希望得到一些帮助,如果您花时间发表评论,谢谢。假设我在 Big Query 中有“BASE”,如果我按月分组和计数(DISTINCT ID_CLIENT),我会得到“表 1”,但我想得到类似“表 2”的东西。第一行包含第 1 个月的唯一客户数量,第二行包含第 1 个月和第 2 个月的唯一客户数量。
我不知道是否可以仅使用 GROUP BY 来实现类似的效果,或者我必须在表“BASE”中创建另一列来 GROUP BY 该新变量,或者有一种方法可以在不创建新变量的情况下实现此目的专栏。
考虑以下方法
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
如果应用于您问题中的样本数据 - 输出为