2016-08-15 49 views
-2

我有两张表,我在表中只有category_id和category_name以及一些关于类别的信息。 另一个表有不同类别的话题,有的题目是积极的,有些是无效的,表与CATEGORY_ID相关SQL:计数和分组的值

我的目标是让所有的类别列表,算多少的话题每个类别都有,但我只是想算活跃的话题。

我当前的查询:

select t2.category, count(*) from table1 t1 
join table2 t2 on t1.category_id=t2.category_id 
where t1.status=active 
group by t2.category 

这个查询提供了与只计算活动的类别。如何获得不活跃的类别?结果是什么,我特林实现是这样的:

Caltegory名称:主题(计):
类别1:1234
类别2:10
类别3:0 - 意味着有
此类别中没有活跃的主题 类别4:240

+0

如何获得不活动的类别?我们不能删除status = active列 – TheGameiswar

+0

使用'left join'而不是'(inner)join'。 –

+2

你的问题不是很清楚,请展示一些样品数据并与之一起解释 – TheGameiswar

回答

0

卸下where标准和使用conditional aggregation代替:

select t2.category, count(case when t1.status = 'Active' then 1 end) 
from table1 t1 
    join table2 t2 on t1.category_id=t2.category_id 
group by t2.category 

或者,如果有在table1没有数据,使用outer join代替:

select t2.category, count(t1.status) 
from table2 t2 
    left join table1 t1 on t1.category_id=t2.category_id and t1.status = 'Active' 
group by t2.category 
0

如果您同时按类别和状态组,应该给你想要的东西:

select t2.category, t1.status, count(*) 
from table1 t1 
    join table2 t2 on t1.category_id=t2.category_id 
group by t2.category, t1.status 
order by t2.category, t1.status 

结果将如下所示:

Category Status  Count 
Category1 Active  1 
Category1 Inactive 2 
0

您可以使用左连接并检查空值(无主题)

select t1.category_name, ifnull(count(*),0(from table1 t1 
left join table2 t2 on t1.category_id=t2.category_id 
group by t2.category 
0

说表2是您的类别,表1包含主题和状态信息。

您可以对所需输出使用左连接。

SELECT t2.category, Count (t1.categoryId) ActiveTopics 
FROM Table2 t2 
LEFT JOIN Table1 t1 on t2.categoryId=t1.categoryId 
    AND t1.status= 'Active' 
GROUP BY t2.category