我的类别包含id
,主题包含id
和category
,以及包含id
和topic
的帖子。我想列出类别以及属于每个类别的主题数量以及属于这些类别的主题的帖子数量。
我到目前为止使用什么来收集类别及其各自的主题计数
select c.*, count(t.id) topics
from categories c
join topics t
on t.category=c.id
group by c.id
我已经尝试了以下内容,但它只是给了我相同的帖子和主题数
select c.*, count(t.id) topics, count(p.id) posts
from categories c
join topics t
on t.category=c.id
join posts p
on p.topic=t.id
group by c.id
尝试left join
似乎没有任何区别
答案 0 :(得分:1)
使用COUNT(DISTINCT t.id)
仅计算每个类别的唯一主题ID。
select c.*, count(DISTINCT t.id) topics, count(p.id) posts
from categories c
join topics t
on t.category=c.id
join posts p
on p.topic=t.id
group by c.id
或者,您可以使用子查询:
select c.*,
count(t.id) topics,
( select count(p.id)
from posts p
where p.topic = t.id
) posts
from categories c
join topics t
on t.category=c.id
group by c.id
甚至
select c.*,
( select count(t.id)
from topics t
where t.category = c.id) topics,
( select count(p.id)
from topics t
join posts p
on p.topic = t.id
where t.category = c.id) posts
from categories c
在这种特殊情况下,count(distinct)
显然是最简单的,但在其他情况下,子查询可以为您提供更多可能性。