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

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

Разбор

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

Проверь себя · 1/3разбор после ответа
Нужно выбрать заказы, у которых amount выше среднего amount по тому же пользователю. Какой вариант WHERE корректно использует коррелированный подзапрос?
Тренировать SQL в Telegram

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