如何在SQL中统计几个关系

时间:2013-10-08 15:48:16

标签: 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;

我的问题是,我如何计算与祖父母有关的孩子数量。表结构无法更改,我想要一个SELECT语句。这可能吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

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

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  

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