Menu
Coddy logo textTech

Последовательность чисел

Часть раздела Продвинутый уровень путешествия по SQL на Coddy — урок 20 из 27.

Вы встречали ключевое слово WITH в модуле Fundamentals для именования подзапроса, также известного как CTE (Common Table Expression). recursive CTE идет на шаг дальше: оно позволяет подзапросу ссылаться на самого себя, формируя результат строка за строкой.

Самый простой вариант генерирует последовательность чисел без исходной таблицы. Структура всегда одинакова:

WITH RECURSIVE counter(n) AS (
    SELECT 1                              -- якорь: начальная строка
    UNION ALL
    SELECT n + 1 FROM counter WHERE n < 5 -- рекурсивная: строим следующую из последней
)
SELECT n FROM counter

Читайте это так: начните с n = 1, затем продолжайте добавлять строки, где каждое n — это предыдущее n + 1, останавливаясь, когда WHERE перестанет совпадать. Результат — 1, 2, 3, 4, 5.

Две части тела объединяются с помощью UNION ALL. Первая — это anchor: начальные строки (seed rows). Вторая — это recursive step: она обращается к самому CTE.

challenge icon

Задание

Легко

Напишите рекурсивное CTE с именем powers с двумя столбцами:

  • i: индекс итерации, starting с 1
  • p: 2 в степени i (2, 4, 8, …)

Остановитесь, как только p превысит 1000. Верните оба столбца, упорядоченные по i по возрастанию.

Попробуйте сами

WITH RECURSIVE powers(i, p) AS (
    -- якорь: i=1, p=2
    -- рекурсия: i+1, p*2, пока p не достигнет 1000
)
SELECT i, p FROM powers ORDER BY i
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Продвинутый уровень