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

AСкопировать одинаковый фильтр по периоду в два разных подзапроса в FROM sales
BСчитать топ через IN (SELECT ...), а общую выручку через EXISTS на тех же данных
CБазовый CTE WITH base_sales AS (...) с фильтром по периоду и расчёт обоих чисел из него
DПоставить фильтр по периоду только в SUM, а в группировке полагаться на JOIN без условий по дате
Правильный ответ. CTE через WITH позволяет определить «базовый слой» данных один раз и использовать его дальше в нескольких расчётах.

Разбор

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

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

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