2016-08-15 52 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