计算组合两个表的行数

问题描述 投票:0回答:1

我可以在以下场景中使用什么 Postgres 查询?

父表: enter image description here

儿童桌: enter image description here

我的预期结果

enter image description here

说明:

Parent1 --> 4 台设备。 Parent1 有...

  • Child1 持有 3 件装备
  • Child2 持有 1 件装备

Parent2 --> 3 台设备。 Parent2 有...

  • Child3持有2件装备
  • Child4 持有 1 件装备
sql postgresql join aggregation
1个回答
0
投票

基本上加入后的聚合:

SELECT p.parent AS name, count(*)
FROM   parent p
JOIN   child  c USING (name)
GROUP  BY p.parent
ORDER  BY p.parent;

查询的细微差别取决于未公开的细节。
例如,要包含没有设备的父母,并优化每个孩子可能多行的性能,请使用

LEFT JOIN
,并在连接之前聚合每个孩子的计数:

SELECT p.parent AS name, sum(c.ct) AS count
FROM   parent p
LEFT   JOIN (
   SELECT c.name, count(*) AS ct
   FROM   child c
   GROUP  BY 1
   ) c USING (name)
GROUP  BY 1
ORDER  BY 1
© www.soinside.com 2019 - 2024. All rights reserved.