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

AОдин большой SELECT, в котором одинаковые условия по статусу и периоду повторяются в каждом подзапросе
BCTE через WITH paid_orders AS (...), а затем агрегация по странам и другим метрикам из этой CTE
CКоррелированный подзапрос в SELECT для каждой строки пользователя, считающий выручку отдельно
DНесколько вложенных IN-подзапросов вместо явного шага фильтрации, чтобы не писать JOIN
Правильный ответ. WITH (CTE) позволяет вынести общий шаг (например, фильтрацию оплаченных заказов) в именованный блок и использовать его дальше как таблицу.

Разбор

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

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

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

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

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

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