如何对 PostgreSQL 中的一组 ID(不是单个 ID)进行分层子计数
How to do hierarchical child count for a set of IDs in PostgreSQL (not a single ID)
我正在使用此 SQL 来检索评论的分层子项计数:
WITH RECURSIVE c AS (
SELECT "Id", "ParentId"
FROM public."Comments"
WHERE "ParentId" = @CommentId
UNION
SELECT s."Id", e."ParentId"
FROM public."Comments" e
INNER JOIN c s ON s."Id" = e."ParentId"
) SELECT COUNT(*)
FROM c;
它按预期工作。
但是我怎样才能将这个 SQL 转换为使用 ID 列表,所以它 returns 一个字典,其中 KEY 是参数列表中的 ID,VALUE 是子级的层次计数?
我在 C#
中将此 SQL 与 Dapper 一起使用
示例“评论”table:
id | parentId
---------------
1 | null
2 | 1
3 | 2
4 | null
5 | 4
6 | 5
7 | 5
输入:
给 DB
的 ID 数组
[1, 4]
输出:
以输入的 ID 作为键和分层子项作为值的字典
{1: 2, 4: 3}
P.S.: 输入输出中的代码只是伪代码
您可以使用此查询来获取结果集
WITH RECURSIVE c AS (
SELECT id, parentId, parentid as sid
FROM Comments
WHERE parentId = ANY(Array [1, 4])
UNION ALL
SELECT e.id, e.parentId, s.sid
FROM Comments e
INNER JOIN c s ON s.id = e.parentId
)
SELECT sid, COUNT(*)
FROM c
group by sid;
returns
sid count
4 3
1 2
我正在使用此 SQL 来检索评论的分层子项计数:
WITH RECURSIVE c AS (
SELECT "Id", "ParentId"
FROM public."Comments"
WHERE "ParentId" = @CommentId
UNION
SELECT s."Id", e."ParentId"
FROM public."Comments" e
INNER JOIN c s ON s."Id" = e."ParentId"
) SELECT COUNT(*)
FROM c;
它按预期工作。
但是我怎样才能将这个 SQL 转换为使用 ID 列表,所以它 returns 一个字典,其中 KEY 是参数列表中的 ID,VALUE 是子级的层次计数?
我在 C#
中将此 SQL 与 Dapper 一起使用示例“评论”table:
id | parentId
---------------
1 | null
2 | 1
3 | 2
4 | null
5 | 4
6 | 5
7 | 5
输入: 给 DB
的 ID 数组[1, 4]
输出: 以输入的 ID 作为键和分层子项作为值的字典
{1: 2, 4: 3}
P.S.: 输入输出中的代码只是伪代码
您可以使用此查询来获取结果集
WITH RECURSIVE c AS (
SELECT id, parentId, parentid as sid
FROM Comments
WHERE parentId = ANY(Array [1, 4])
UNION ALL
SELECT e.id, e.parentId, s.sid
FROM Comments e
INNER JOIN c s ON s.id = e.parentId
)
SELECT sid, COUNT(*)
FROM c
group by sid;
returns
sid count
4 3
1 2