我有3个表;
- idmaster
- data1
- data2
idmaster
具有所有id。我需要计算每个id在data1和data2中存在的次数,并分别输出它们。
id
来源于idmaster
。理想情况下,即使没有数据存在,也希望拥有所有这些数据,但这并不重要。data1
和data2
确实有id列。
id | data1 cnt | data2 cnt | 104 | 20 | B
---|---|---|
12 | 4 | |
0 | 0 |
您可以使用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