postgrePostgres SQL使用来自第三个表的id从两个表收集数据



我有3个表;

  • idmaster
  • data1
  • data2

idmaster具有所有id。我需要计算每个id在data1和data2中存在的次数,并分别输出它们。

id来源于idmaster。理想情况下,即使没有数据存在,也希望拥有所有这些数据,但这并不重要。data1data2确实有id列。

例子
tbody> <<tr>BC
iddata1 cntdata2 cnt
10420
124
00

您可以使用left join分别在data1, data2表中查找id的计数,然后将这两个单独的查询连接起来以获得所需的输出。

with data1_counts as
(
select M.id, count(D1.id) data1_cnt from 
idmaster M left join data1 D1
on M.id=D1.id
group by M.id
),
data2_counts as 
(
select M.id, count(D2.id) data2_cnt from 
idmaster M left join data2 D2
on M.id=D2.id
group by M.id
)
select dt1.id, dt1.data1_cnt, dt2.data2_cnt
from data1_counts dt1 join data2_counts dt2
on dt1.id=dt2.id
order by dt1.id

查看演示

可以使用两个"标量子查询";(下面的第2行和第3行)来计算相关行的计数。例如:

select id,
(select count(*) from data1 d where d.id = m.id) as data1_cnt,
(select count(*) from data2 d where d.id = m.id) as data2_cnt
from idmaster m

最新更新