始める無料で始める

世代数を求めよう

この演習では、ランダムな家系図を見ていきます。データセット family は、IDnameParentID の3列で構成されています。 あなたのタスクは、世代数を計算することです。ParentID = 101 の人物から始めて、すべての世代を数えていきます。

このタスクでは、世代階層における現在のレベルを表す再帰の LEVEL を計算します。その後、COUNT() を使って LEVEL の数を数えてください。レベルの数が世代数に相当することを思い出してください。例えば、レベル数が 100 であれば、100 世代見つかったということです。

この演習はコースの一部です

SQL Server における階層型クエリと再帰クエリ

コースを見る

演習の手順

  • ParentID101 に設定して、再帰の開始点を初期化します。
  • LEVEL を現在の再帰ステップに設定します。
  • 親と子の ID を使って、アンカーメンバーを 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);
コードを編集して実行