Подсчёт количества поколений
В этом упражнении мы рассмотрим произвольное генеалогическое дерево. Набор данных family состоит из трёх столбцов: ID, name и ParentID.
Ваша задача — подсчитать количество поколений. Для этого нужно перебрать все поколения, начиная с человека, у которого ParentID = 101.
Вам необходимо вычислить значение LEVEL рекурсии, которое отражает текущий уровень в иерархии поколений. Затем подсчитайте количество уровней с помощью COUNT(). Помните: количество уровней соответствует числу поколений — например, если счётчик равен 100, значит, было найдено 100 поколений.
Это упражнение является частью курса
Иерархические и рекурсивные запросы в SQL Server
Инструкции к упражнению
- Инициализируйте начало рекурсии, задав
ParentIDравным101. - Присвойте
LEVELзначение текущего шага рекурсии. - Соедините якорный элемент с CTE по идентификатору родителя и дочернего узла.
- Подсчитайте количество поколений с помощью
COUNT().
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
WITH children AS (
SELECT
ID,
Name,
ParentID,
0 as LEVEL
FROM family
-- Set the targeted parent as recursion start
WHERE ___ = ___
UNION ALL
SELECT
child.ID,
child.NAME,
child.ParentID,
-- Increment LEVEL by 1 each step
___ + ___
FROM family child
INNER JOIN children
-- Join the anchor query with the CTE
ON child.___ = children.___)
SELECT
-- Count the number of generations
___(___) as Generations
FROM children
OPTION(MAXRECURSION 300);