CTE (WITH) улучшает читаемость, позволяет повторно использовать результат и поддерживает рекурсию. Подзапрос компактнее для простых случаев. Производительность обычно одинакова
CTE всегда быстрее подзапроса, потому что PostgreSQL материализует CTE один раз и переиспользует результат — это специально оптимизировано под большие данные и сложные запросы
Подзапрос единственный способ выразить рекурсию через self-join, а CTE поддерживает только плоские выражения — поэтому иерархии сотрудников, деревья категорий всегда пишут через подзапросы
CTE нельзя комбинировать с JOIN к основной таблице из-за правил области видимости, поэтому для любых многотабличных запросов нужен подзапрос или временная таблица через CREATE TEMP TABLE
Разбор ответа
Подробный разбор с объяснением «почему правильный ответ верный» и почему остальные неверны — после регистрации.
2475 вопросов с разбором, quiz-режим с проверкой, AI-собес и подготовка к интервью аналитика.