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

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

Разбор

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

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

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