如何计算SQL中的几个关系

如何计算SQL中的几个关系,sql,firebird,Sql,Firebird,我有一个表结构,简化后看起来像这样 grandparents id name parents id grandparent_id name children id parent_id name 我知道,我能数出一个父母有多少个这样的孩子: select name, ( select count (*) from children c where c.parent_id = p.id ) as count from p parents; 我的问题是,

我有一个表结构,简化后看起来像这样

grandparents
  id
  name
parents
  id
  grandparent_id
  name
children
  id
  parent_id
  name
我知道,我能数出一个父母有多少个这样的孩子:

select
  name,
  ( select count (*) from children c where c.parent_id = p.id ) as count
  from p parents;
我的问题是,我如何计算与祖父母有亲属关系的孩子的数量。无法更改表结构,我需要一个SELECT语句。可能吗


提前感谢。

这应该可以做到,即使是在奇怪的家谱中(例如父母是兄弟):


请参阅(没有可用的Firebird引擎,但此代码符合SQL标准)。

谢谢,伙计。我真的应该学习如何使用JOIN命令哦,等等,我现在在哪里检查特定的gp.id?在末尾添加where子句?或者就在第一个内部联接之前?将其添加到GROUP BY子句之前。
SELECT gp.id,
       gp.name,
       COUNT(DISTINCT c.id)
FROM   grandparents gp
       INNER JOIN parents p
               ON p.grandparent_id = gp.id
       INNER JOIN children c
               ON c.parent_id = p.id
GROUP  BY gp.id,
          gp.name