Как использовать array_agg с условием?

У меня есть таблица со списком потенциальных клиентов, их деятельностью и их торговым представителем. У каждого покупателя может быть до 1 торгового представителя. Я создал сводную таблицу, в которой я собираю активность клиентов, группирую ее по торговому представителю и фильтрую по дате создания клиента. Это НЕ когорта (не все customers соответствуют scheduled_flights, это скорее снимок активности за данный период времени). Это выглядит примерно так:

введите здесь описание изображения

Теперь, помимо общего числа клиентов, я также хотел бы вывести массив этих реальных клиентов. Поле customers в настоящее время рассчитывается путем выполнения sum(is_customer) as customers, а затем группировки по торговому представителю. Чтобы создать массив, я попытался сделать array_agg(customer_name), который выводит список всех имен клиентов - мне просто нужен список имен, которые также удовлетворяют условию is_customer = 1, но я не могу использовать это как предложение where, поскольку оно будет отфильтровывать другие действия, такие как запланированные и выполненные рейсы, для клиентов, которые не были новыми.


person bayesian.asian    schedule 18.06.2019    source источник


Ответы (1)


Вероятно, это должно сработать:

array_agg(case when is_customer = 1 then customer_name end) within group (order by customer_name)

Snowflake должен игнорировать NULL значения в агрегации.

person Gordon Linoff    schedule 18.06.2019
comment
Ага! я даже не подумал, чтобы это раскрыть. Спасибо! - person bayesian.asian; 18.06.2019