В одном отчёте вы считаете несколько метрик по событиям: dau, wau и число покупок. У всех метрик один и тот же фильтр: только продакшн-трафик и только выбранный период. Какой подход лучше защищает от ситуации, когда в одной метрике забыли часть фильтра?

AСделать базовый CTE WITH base_events AS (...) с общим фильтром и строить все метрики от него.
BКопировать один и тот же фильтр в каждый подзапрос/CTE отдельно.
CСделать отдельный подзапрос в SELECT для каждой метрики, повторяя WHERE.
DСначала посчитать метрики на сырых данных, а потом попытаться отфильтровать уже агрегированный результат.
Правильный ответ. Общий базовый CTE через WITH снижает риск расхождения бизнес-логики между метриками.

Разбор

Когда общий фильтр (период, среда, исключения) повторяется, дублирование условий делает запрос хрупким: достаточно один раз забыть условие — и метрика станет несравнимой с остальными. Базовый CTE фиксирует единый набор событий, после чего каждую метрику можно считать отдельным шагом. Это повышает детерминизм и упрощает проверку: сначала валидируете base_events, затем сравниваете агрегаты.

Проверь себя · 1/3разбор после ответа
В одном отчёте вы считаете несколько метрик по событиям: dau, wau и число покупок. У всех метрик один и тот же фильтр: только продакшн-трафик и только выбранный период. Какой подход лучше защищает от ситуации, когда в одной метрике забыли часть фильтра?
Тренировать SQL в Telegram

Ещё вопросы по теме «Подзапросы и CTE»