我是SQL的新手,我不知道当前要搜索的正确单词。
我有一个这样的第一个表-它有5行。
SELECT
tFinal2.region, COUNT(newsfeed_id) AS comment
FROM
(SELECT *
FROM
((SELECT *
FROM public.newsfeed_comment) AS T1
INNER JOIN
(SELECT * FROM public.newsfeed) AS T2 ON T1.newsfeed_id = T2.seq) AS tFinal1) AS tFinal2
GROUP BY
tFinal2.region
这是我的第二张桌子:
SELECT tFinal2.region, COUNT(newsfeed_id) AS media
FROM
(SELECT *
FROM
((SELECT *
FROM public.newsfeed_media) AS T1
INNER JOIN
(SELECT * FROM public.newsfeed) AS T2 T1.newsfeed_id = T2.seq) AS tFinal1) AS tFinal2
GROUP BY
tFinal2.region
第二个表有6行。
因此,如果我仅使用内部联接,外部联接等将表#1的5行和表#2的6行联接起来,它将仅返回5行。
我如何加入,以便它将返回所有行并将缺失值的默认值设置为零? (我也不知道哪个表有更多行。它可以不时更改,并且无法左右合并)。
答案 0 :(得分:1)
我想你想要
select nf.region, coalesce(sum(num_comments), 0) as num_comments,
coalesce(sum(num_media), 0) as num_media
from public.newsfeed nf left join
(select c.newsfeed_id, count(*) as num_comments
from public.newsfeed_comment c
group by c.newsfeed_id
) c
on nf.seq = c.newsfeed_id left join
(select m.newsfeed_id, count(*) as num_media
from public.newsfeed_media m
group by m.newsfeed_id
) m
on nf.seq = m.newsfeed_id
group by nf.region;
注意:
NULL
值,请使用coalesce()
。(select * from . . . )
子查询。这些都很难编写和阅读。在某些数据库中,它们会影响性能。答案 1 :(得分:0)
使用left join和coalesce()函数将缺失值替换为0
select tFinal2.region, coalesce(count(newsfeed_id),0) as comment from (
select * from (
(SELECT *
FROM public.newsfeed_comment) as T1
left join
(SELECT * from public.newsfeed) as T2
on T1.newsfeed_id = T2.seq) as tFinal1
) as tFinal2
group by tFinal2.region