Postgresql 如何计算postgres中的多个连接行?
我有4张桌子:A、B、C、DPostgresql 如何计算postgres中的多个连接行?,postgresql,join,Postgresql,Join,我有4张桌子:A、B、C、D 表B具有a的外键 表C有一个a的外键 表D有一个C的外键 到目前为止我可以查询的内容: 我知道如何从A中选择所有行,并计算B中连接行的数量 我知道如何从A中选择所有行,并从D(通过C)计算连接行的数量 现在我想将这两个查询合并到一个select中,并显示count_b和count_d。但是结果select显示了错误的计数。我是这样做的: SELECT "A"."id", COUNT("B"."id") AS "B_count", COUNT("
- 表B具有a的外键
- 表C有一个a的外键
- 表D有一个C的外键
- 我知道如何从A中选择所有行,并计算B中连接行的数量
- 我知道如何从A中选择所有行,并从D(通过C)计算连接行的数量
SELECT
"A"."id",
COUNT("B"."id") AS "B_count",
COUNT("D"."id") AS "D_count"
FROM "users" AS "A" LEFT OUTER JOIN "B" AS "B"
ON "A"."id" = "B"."a__id"
LEFT OUTER JOIN "C" AS "C"
ON "A"."id" = "C"."a_id"
LEFT OUTER JOIN "D" AS "D"
ON "C"."id" = "D"."c_id"
GROUP BY "A"."id"
分组方式可能存在问题。似乎我需要为每一个计数写单独的分组。我正在寻找没有嵌套选择的结果(因为我仍然需要将其映射到ORM,不要问为什么)。是否可以使用distinct by
存档?由于您要加入3个表,您应该在计数内使用distinct:
SELECT
"A"."id",
COUNT(DISTINCT "B"."id") AS "B_count",
COUNT(DISTINCT "D"."id") AS "D_count"
FROM "users" AS "A" LEFT OUTER JOIN "B" AS "B"
ON "A"."id" = "B"."a__id"
LEFT OUTER JOIN "C" AS "C"
ON "A"."id" = "C"."a_id"
LEFT OUTER JOIN "D" AS "D"
ON "C"."id" = "D"."c_id"
GROUP BY "A"."id"
尝试使用count(distinct D)和count(distinct B)我缺少的是distinct:-)