これを分解しましょう:
WITH RECURSIVE t(n) AS (
シード クエリと再帰クエリを含むことになっている Common Table Expression (CTE)。CTE はtと呼ばれ、1 列を返します: n
シード クエリ:
SELECT 1
ans 回答セット (この場合は 1 行だけ: 1) を返し、そのコピーを最終的な回答セットに入れます。
再帰部分を開始します。
UNION ALL
シード クエリから返された行が処理され、n+1 が返され (ここでも 1 行の回答セット: 2)、最終的な回答セットにコピーされます。
SELECT n+1 FROM t WHERE n < 100
このステップが空でない回答セット (activity_count > 0) を返した場合、それは (永遠に) 繰り返されます。
このn+1のような計算の WHERE 条件は、通常、無限の再帰を避けるために使用されます。通常、データに基づいて可能な最大レベルを知っていますが、複雑なクエリの場合、いくつかの条件を簡単に間違えてしまいます;-)
最後に、回答セットが返されます。
)
SELECT sum(n) FROM t;
単純にSELECT * FROM t;を実行すると、1 から 100 までのすべての数字が表示されますが、このリストを作成する方法はあまり効率的ではありません。
覚えておくべき最も重要なことは、各ステップが最終結果の一部を生成し、前のステップの行のみが次の再帰レベルで処理されるということです。