sql 层级数
sql hierarchy count
我有一个名为 sql table 的 id 及其 parent 的 id(其中 0 表示没有 parent),如下所示:
id | parentid
--------------
1 | 0
2 | 0
3 | 1
4 | 0
5 | 2
6 | 2
7 | 3
8 | 1
从这个 table 我需要一个 sql 查询到 return 一个 table 每个 id 的 children 的数量应该导致以下:
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
一种方法是使用 left join
和聚合。但是,相关子查询甚至可能会更好:
select p.id,
(select count(*)
from parentids p2
where p2.parentid = p.id
) as childrenCnt
from parentids p;
您可以使用 group by on parentId,
仅限 children 的成员:
select
parentId,
COUNT(*)
from Parentids
where
parentId <> 0
group by
parentId
编辑:
所有成员,以准确匹配 OP 预期结果:
select
parentId,
COUNT(*)
from Parentids
group by
parentId
order by
2,1
您可以GROUP BY
parentids 然后删除id = 0 的记录(第一行)。所以试试这个代码:
select parentid as id, count(*) as childrenCnt
from Parentids
where id <> 0
group by id
您可以使用以下内容:
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;
它产生您指定的输出。
我有一个名为 sql table 的 id 及其 parent 的 id(其中 0 表示没有 parent),如下所示:
id | parentid
--------------
1 | 0
2 | 0
3 | 1
4 | 0
5 | 2
6 | 2
7 | 3
8 | 1
从这个 table 我需要一个 sql 查询到 return 一个 table 每个 id 的 children 的数量应该导致以下:
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
一种方法是使用 left join
和聚合。但是,相关子查询甚至可能会更好:
select p.id,
(select count(*)
from parentids p2
where p2.parentid = p.id
) as childrenCnt
from parentids p;
您可以使用 group by on parentId,
仅限 children 的成员:
select
parentId,
COUNT(*)
from Parentids
where
parentId <> 0
group by
parentId
编辑:
所有成员,以准确匹配 OP 预期结果:
select
parentId,
COUNT(*)
from Parentids
group by
parentId
order by
2,1
您可以GROUP BY
parentids 然后删除id = 0 的记录(第一行)。所以试试这个代码:
select parentid as id, count(*) as childrenCnt
from Parentids
where id <> 0
group by id
您可以使用以下内容:
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;
它产生您指定的输出。