WITH: именованные запросы
168 мин
Сложные запросы быстро превращаются в путаницу: подзапрос в подзапросе… WITH (CTE — Common Table Expression) разбивает их на понятные именованные шаги.
Шаблон
WITH имя AS (
SELECT …
)
SELECT … FROM имя;имя — временная таблица, которая существует только в пределах этого запроса.
Пример: студенты с высоким средним баллом
Сначала считаем средний балл каждого студента, потом пользуемся им:
То же самое можно написать подзапросом, но с WITH читать гораздо легче: у каждого шага есть имя.
Несколько CTE
Пишутся через запятую, каждый следующий может использовать предыдущий:
Рекурсивный CTE
WITH RECURSIVE вызывает сам себя — для данных в виде дерева (руководитель → подчинённый → его подчинённый…):
Первая часть — точка старта (генеральный директор), вторая каждый раз спускается на уровень ниже.
С помощью WITH посчитайте число завершённых поездок каждого водителя и выведите driver_id и число поездок для тех, у кого их больше 40.
Запомните
WITH имя AS (…)разбивает запрос на именованные шаги.- Несколько CTE — через запятую; следующий может использовать предыдущий.
WITH RECURSIVE— для деревьев и цепочек.