Что является практическим преимуществом разбиения сложного запроса на шаги через WITH по сравнению с несколькими вложенными подзапросами?
A
WITH автоматически делает результаты «точнее», чем вложенные подзапросы.B
WITH запрещает использовать NULL, поэтому меньше ошибок.C
WITH гарантирует, что запрос будет выполняться быстрее.D
WITH позволяет дать шагам имена, переиспользовать их и проверять промежуточные результаты отдельно.Правильный ответ.
WITH улучшает читаемость: вы именуете шаги и можете запускать их по отдельности для проверки.Разбор
CTE превращает сложную логику в последовательность небольших шагов: фильтрация, обогащение, агрегация. Это снижает когнитивную нагрузку и помогает обнаруживать ошибки раньше (например, неправильную гранулярность или лишние строки). Кроме того, если один и тот же шаг нужен дважды, его можно переиспользовать без копирования условий.
Проверь себя · 1/3разбор после ответа
В одном отчёте вы считаете несколько метрик по событиям:
dau, wau и число покупок. У всех метрик один и тот же фильтр: только продакшн-трафик и только выбранный период. Какой подход лучше защищает от ситуации, когда в одной метрике забыли часть фильтра?Ещё вопросы по теме «Подзапросы и CTE»
- В отчёте нужно посчитать выручку по странам пользователей только по оплаченным заказам за период. Какой подход обычно делает запрос более читаемым и позволяет переиспользовать шаг фильтрации?
- Вы выбираете пользователей, у которых есть хотя бы один платеж. В таблице `payments` поле `user_id` иногда бывает `NULL` (например, анонимные платежи). Почему в такой ситуации часто предпочитают `EXISTS`, а не `IN`?
- Вы пишете `SELECT u.user_id, (SELECT order_id FROM orders o WHERE o.user_id = u.user_id) AS last_order_id FROM users u`. Что может пойти не так и как исправить, чтобы подзапрос стал скалярным?
- Нужно выбрать заказы, у которых `amount` выше среднего `amount` по тому же пользователю. Какой вариант `WHERE` корректно использует коррелированный подзапрос?
- Вы готовите дашборд: нужно (1) топ товаров по выручке за период и (2) общая выручка за тот же период. Какой вариант снижает риск, что фильтр по периоду рассинхронизируется между расчётами?
- Все вопросы по «Подзапросы и CTE» →