我在PostgreSQL中遇到了一个关于ltree数据类型列的问题,如下所示.
这是Asset
人表:
Id | Name | GroupId |
---|---|---|
1 | Ass1 | 1 |
2 | Ass2 | 1 |
3 | Ass3 | 2 |
4 | Ass4 | 3 |
5 | Ass5 | 4 |
6 | Ass6 | 4 |
7 | Ass7 | 4 |
这是AssetGroup
人表:
Id | Name | Path | Level |
---|---|---|---|
1 | grp1 | 1 | 1 |
2 | grp2 | 1.2 | 2 |
3 | grp3 | 3 | 1 |
4 | grp4 | 3.4 | 2 |
我想创建一个查询语句来计算每个组拥有的assets资源 数量,并期望父组的assets资源 数量的结果是它自己及其子记录拥有的assets资源 总数.
预期结果应该是:
Id | Name | Path | Level | AssetQuantity |
---|---|---|---|---|
1 | grp1 | 1 | 1 | 3 |
2 | grp2 | 1.2 | 2 | 1 |
3 | grp3 | 3 | 1 | 4 |
4 | grp4 | 3.4 | 2 | 3 |
我的维护查询是:
SELECT grp_parent."Id"
, grp_parent."Name"
, grp_parent."Path"
, grp_parent."Level"
, COUNT("Asset".*) AS "AssetQuantity"
FROM "AssetGroup" grp_parent
LEFT JOIN "AssetGroup" grp_child
ON (
grp_parent."Path" @> grp_Child."Path"
AND grp_child."DelFlag" = FALSE
)
JOIN "Asset" ON (
grp_child."Id" = "Asset"."GroupId"
AND "Asset"."DelFlag" = FALSE
)
GROUP BY grp_parent."Path"
, grp_parent."Id"
然而,目前的结果是:
Id | Name | Path | Level | Quantity |
---|---|---|---|---|
1 | grp1 | 1 | 1 | 3 |
2 | grp2 | 1.2 | 2 | 1 |
有没有人能帮我一下?