我有一个名为Parentids of id的sql表及其父ID(其中0代表没有父代),如下所示:
id | parentid
--------------
1 | 0
2 | 0
3 | 1
4 | 0
5 | 2
6 | 2
7 | 3
8 | 1
从这个表中我需要一个sql查询来返回一个表,其中包含应该导致以下内容的每个id的子项数:
id | childrenCnt
--------------
1 | 2
2 | 2
3 | 1
4 | 0
5 | 0
6 | 0
7 | 0
8 | 0
我有以下sql查询但它似乎不起作用:
SELECT id
,sum(CASE
WHEN parentid = tid
THEN 1
ELSE 0
END) AS childrenCnt
FROM Parentids
答案 0 :(得分:0)
一种方法是使用left join
和聚合。但是,相关子查询甚至可能更好:
select p.id,
(select count(*)
from parentids p2
where p2.parentid = p.id
) as childrenCnt
from parentids p;
答案 1 :(得分:0)
您可以在parentId
上使用分组进行此操作只有有孩子的成员:
}
修改强>
所有成员,以匹配确切的OP预期结果:
select
parentId,
COUNT(*)
from Parentids
where
parentId <> 0
group by
parentId
答案 2 :(得分:0)
你可以GROUP BY
parentids然后删除id = 0(第一行)的记录。所以试试这段代码:
select parentid as id, count(*) as childrenCnt
from Parentids
where id <> 0
group by id
答案 3 :(得分:0)
您可以使用以下内容:
SELECT p.id,
COUNT(DISTINCT ch.id) AS childrenCnt
FROM Parentids p
LEFT JOIN Parentids ch ON p.id = ch.parentid
GROUP BY p.id;
它会生成您指定的输出。