Postgresql 如何计算postgres中的多个连接行?

Postgresql 如何计算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("

我有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("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:-)