Хочу рассказать про удобную конструкцию, про которую знают далеко не все. Часто возникают ситуации, когда при агрегации нужно учесть не все строки данных, а только подходящие под определенные условия. Конструкция такая: функция агрегации FILTER (WHERE условие фильтрации данных для учета в этой метрике) Например, нам нужно посчитать несколько метрик - кол-во всех клиентов по customer_id - кол-во клиентов, у которых источник регистрации будет один из этих: direct, form, vk Пишем запрос SELECT COUNT(DISTINCT customer_id), COUNT(DISTINCT customer_id) FILTER (WHERE reg_source IN ('direct', 'form', 'vk') FROM customers Можно конечно писать через CASE, но конструкция с фильтром более наглядная, емкая и эффективная в плане оптимизации SELECT COUNT(DISTINCT customer_id), COUNT(DISTINCT CASE WHEN reg_source IN ('direct', 'form', 'vk') THEN customer_id ELSE NULL END) FROM customers Еще больше фишек SQL на продвинутом курсе, запись в группу