SQL外键计数

时间:2013-10-07 21:58:03

标签: sql count jpql

Person包含id列和parent_id

我需要一个包含id列和children_count列的表格。怎么做?为什么我不能写这样的东西? :

SELECT 
    id, count(parent_id) AS children_count
FROM 
    Person
GROUP BY 
    parent_id;

2 个答案:

答案 0 :(得分:3)

您应该将表连接到自身以查找所有ID及其子项,然后计算计数。

select a.id parent,
       count(b.id) count_child
  from person a left outer join person b
    on a.id = b.parent_id
 group by a.id
 order by a.id;

sqlfiddle的演示。

使用右外连接也可以实现相同的结果。

select b.id parent,
       count(a.id) count_child
  from person a right outer join person b
    on a.parent_id = b.id
 group by b.id
 order by b.id; 

答案 1 :(得分:0)

似乎查询的选择部分是问题所在。以下内容将为您提供每个parent_id的子项数

SELECT parent_id, count(id) AS children_count 
FROM Person 
GROUP BY parent_id