选择包含主题和帖子计数的所有类别

时间:2014-09-24 12:09:47

标签: mysql

我的类别包含id,主题包含idcategory,以及包含idtopic的帖子。我想列出类别以及属于每个类别的主题数量以及属于这些类别的主题的帖子数量。

我到目前为止使用什么来收集类别及其各自的主题计数

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似乎没有任何区别

1 个答案:

答案 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)显然是最简单的,但在其他情况下,子查询可以为您提供更多可能性。