如何在条件下使用 array_agg?
How do I use array_agg with a condition?
我有一个 table 列表,其中包含潜在客户、他们的 activity 和他们的销售代表。每个客户最多可以有 1 个销售代表。我建立了一个摘要 table,我在其中汇总了客户 activity,并按销售代表对其进行分组,并按客户创建日期进行筛选。这不是一个群组(customers
并不都对应于 scheduled_flights
,而是给定时间段内 activity 的快照)它看起来像这样:
现在,除了客户总数之外,我还想输出一组实际客户。 customers
字段当前是通过执行 sum(is_customer) as customers
然后由销售代表分组来计算的。为了构建数组,我尝试执行 array_agg(customer_name)
输出所有客户名称的列表——我只需要也满足 is_customer = 1
条件的名称列表,但我做不到将其用作 where 子句,因为它会过滤掉其他 activity,例如非新客户的预定和已完成航班。
这应该可行:
array_agg(case when is_customer = 1 then customer_name end) within group (order by customer_name)
Snowflake 应该忽略聚合中的 NULL
个值。
我有一个 table 列表,其中包含潜在客户、他们的 activity 和他们的销售代表。每个客户最多可以有 1 个销售代表。我建立了一个摘要 table,我在其中汇总了客户 activity,并按销售代表对其进行分组,并按客户创建日期进行筛选。这不是一个群组(customers
并不都对应于 scheduled_flights
,而是给定时间段内 activity 的快照)它看起来像这样:
现在,除了客户总数之外,我还想输出一组实际客户。 customers
字段当前是通过执行 sum(is_customer) as customers
然后由销售代表分组来计算的。为了构建数组,我尝试执行 array_agg(customer_name)
输出所有客户名称的列表——我只需要也满足 is_customer = 1
条件的名称列表,但我做不到将其用作 where 子句,因为它会过滤掉其他 activity,例如非新客户的预定和已完成航班。
这应该可行:
array_agg(case when is_customer = 1 then customer_name end) within group (order by customer_name)
Snowflake 应该忽略聚合中的 NULL
个值。