Postgresql:用作表达式的子查询返回多于一行?

Postgresql: more than one row returned by a subquery used as an expression?

我有一个查询要在家谱中查找最年轻的一代。 这是我的数据库

ID  NAME PARENT_ID
1   A       0
2   B       1
3   C       1
4   D       2
5   E       3
6   F       3
7   G       6

如果结果不止一行,我需要如下所示的输出

NAME GENERATIONS
E       4
F       4

或者如果结果 returns 单行

NAME GENERATIONS
G       5   

这是我的查询:

WITH RECURSIVE children AS
(
    SELECT id, name, parent_id 
    FROM family
    
    UNION ALL
    
    SELECT f.id, f.name, f.parent_id 
    FROM family f   
    INNER JOIN children c ON c.id = f.parent_id
)

SELECT 
    (
        SELECT name 
        FROM family
        WHERE id IS NOT NULL
        AND parent_id =
        (
            SELECT MAX(parent_id) as maxpi
            FROM family
        )
    ) AS name,  
        COUNT(DISTINCT main.parent_id) AS generations

FROM family main
ORDER BY name

如何解决这个问题?另一个问题是有没有办法使用 window 函数获得结果?

递归时计算生成,然后得到匹配max(generation)的行。

WITH RECURSIVE children AS (
    SELECT id, name, parent_id, 1 as generation
      FROM family
     WHERE parent_id not in (SELECT id FROM family)
    UNION ALL
    SELECT f.id, f.name, f.parent_id, c.generation + 1 as generation
      FROM family f   
           INNER JOIN children c ON c.id = f.parent_id
)
SELECT *
  FROM children
 WHERE generation = (select max(generation) from children);