如何对 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