2014-01-07 69 views
1

有兩個表格。 1st:blogCategories,2nd:博客。 表博客分類只有2個字段,id和categoyName。以前插入了許多類別名稱。表博客有id,blogCatID,標題,博客,日期檔案。 表中有很多記錄博客。但並不是所有的categoryName都被使用過。 我嘗試獲取類別名稱列表及其在博客中的使用次數。如果categoryName不在博客中使用,我需要0(零)。如何從MySQL中的兩個表中獲取不同值的計數?

我用下面的查詢。但categoryNames即使沒有被使用也會獲得計數1。

SELECT DISTINCT categoryName, COUNT(*) AS totalBlogCount 
FROM 
    (SELECT bc.categoryName 
    FROM 
     blogCategories bc 
     LEFT JOIN blog b ON bc.id=b.blogCatID) AS tot 
GROUP BY categoryName 
+0

所以博客中只能有一類? –

+0

是的。只有blogCatID(Int)字段的一個類別ID。 – caglaror

+2

將'LEFT JOIN'改爲'JOIN'。 –

回答

2

以下查詢將爲您提供categoryName和count的用法。如果沒有使用那麼它將返回0count(null value)=0

SELECT bc.categoryName, COUNT(b.blogCatID) AS totalBlogCount 
FROM blogCategories bc Left JOIN blog b ON bc.id=b.blogCatID 
GROUP BY categoryName 

輸出將看起來像

inspirational 5 
technical 2 
political 0 
random 3 
+0

我後來看到。謝謝,這可以解決我想要的問題。 – caglaror

1
SELECT bc.categoryName, COUNT(*) AS totalBlogCount 
FROM blogCategories bc INNER JOIN blog b ON bc.id=b.blogCatID 
GROUP BY categoryName 
+0

不確定你是對的還是我,取決於是否需要0不在博客中的類別。 :( –

+0

啊,是的,沒想到的; +1 –

2
Select bc.CategoryName, NullIf(bCounts.NumberOfTimesUsed,0) As NumberOfTimesUsedInBlog 
From BlogCategories bc 
Left Join 
(Select blogCatID, Count(*) as NumberOfTimesUsed 
From Blog Group By BlogCatID) bCounts 
On bCounts.BlogCatID = bc.ID 
1

首先你算使用blogCatID:

select blogCatID, count(*) as Number 
from blog 
group by blogCatID 

以後你可以找出哪些是不使用blogCategories:

select * 
from blogCategories as bc 
where bc.id not in (select blogCatID 
    from blog 
    group by blogCatID) 

下一個嘗試列表blogCategories與b中的使用次數一起日誌(如果未使用,則爲0):

select isnull(b.numb, 0) as num, bc.* 
from blogCategories as bc left join (select blogCatID, count(*) as numb 
    from blog 
    group by blogCatID) as b ON bc.id b.blogCatID 
+0

我需要0即使不在選擇博客CatID 從博客 group by blogCatID – caglaror

+1

對不起,我的sql語法更可能ms-sql ... – Ice

相關問題