НачатьНачать бесплатно

Подсчёт количества поколений

В этом упражнении мы рассмотрим произвольное генеалогическое дерево. Набор данных 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);
Редактировать и запускать код