2012-12-28 55 views
0

我有一個三重連接,看起來像這樣:組由一個字段和計數匹配字段

select DATE_FORMAT(Posts.PostDate, '%Y-%m-%d'), (Tags.TagName) 
    from Posts 
    join PostTags 
      on Posts.PK_PostID = PostTags.FK_PostID 
     join Tags 
      on Tags.PK_TagID = PostTags.FK_TagID 
    where Tags.TagName = 'Money' 

結果看起來是這樣的:

enter image description here

但我希望它是按日期分組,然後在其旁邊使用標籤的次數。我無法弄清楚。事情是這樣的:

2012-12-26 10 
2012-12-27 4 
+0

你可以發佈一個sql小提琴嗎? – Woot4Moo

+0

如果ta中有多行ble具有相同的postdate但具有不同的標記名?然後你想要查詢輸出什麼? –

+0

@CharlesBretana他的where子句是選擇發生的地方,至少在這個具體的查詢中。 – Woot4Moo

回答

1

如果沒有小提琴,我相信你想要的東西是這樣的:

select DATE_FORMAT(Posts.PostDate, '%Y-%m-%d'), count(Tags.TagName) 
    from Posts 
    join PostTags 
      on Posts.PK_PostID = PostTags.FK_PostID 
     join Tags 
      on Tags.PK_TagID = PostTags.FK_TagID 
    where Tags.TagName = 'Money' 
    group by DATE_FORMAT(Posts.PostDate, '%Y-%m-%d') 
+0

可能希望按DATE(Posts.PostDate)進行分組,以防萬一它包含時間。 –

+0

謝謝,我在羣組中做了一個小的編輯,它應該與第一行使用的DATE_FORMAT相同。 – Veltar

+0

這將計算給定postdate的所有標記名,而不是每個tagnmae的計數 –

0

我沒有你的表,但試試這個:

SELECT DATE_FORMAT(Posts.PostDate, '%Y-%m-%d') as PDate, COUNT(*) FROM Posts 
JOIN PostTags ON Posts.PK_PostID = PostTags.FK_PostID 
JOIN Tags ON Tags.PK_TagID = PostTags.FK_TagID 
WHERE Tags.TagName = 'Money' 
GROUP BY PDate 

http://dev.mysql.com/doc/refman/5.1/en/counting-rows.html更多詳細信息

+1

'WHERE'子句在'GROUP BY'之前...... –

+0

@ypercube謝謝我更新了我的答案因此。 –

0

這是一個簡單的聚合查詢。我選擇使用查詢作爲子查詢來寫,雖然這不是絕對必要的:

select thedate, 
     sum(case when tagname = 'Money' then 1 else 0 end) as NumMoney 
from (select DATE_FORMAT(Posts.PostDate, '%Y-%m-%d') as thedate, (Tags.TagName) 
     from Posts join 
      PostTags 
      on Posts.PK_PostID = PostTags.FK_PostID join 
      Tags 
      on Tags.PK_TagID = PostTags.FK_TagID 
    ) t 
group by thedate 
0

好,你必須使用GROUP BY子句,如果標籤名稱是在輸出中,你必須以標籤名稱爲準。 (否則,如果有與同一日期,但不同的標記名稱,其中標籤名稱應該是一個行與任何特定日期輸出多行?....

select DATE_FORMAT(p.PostDate, '%Y-%m-%d'), (t.TagName), 
     Count(Distinct t.tagname) tagCount 
from Posts p 
    join PostTags pt 
     on pt.FK_PostID - p.PK_PostID 
    join Tags t 
     on t.PK_TagID = pt.FK_TagID 
group by DATE_FORMAT(p.PostDate, '%Y-%m-%d'), (t.TagName) 

如果有可以與相同的多個行日期,但不同的標記名稱,你想爲每個不同的標記名計數,那麼你就需要按標記名也就是這一點,你要

+0

基於他的原創,我不認爲他關心標籤名稱,只是每個日期在他的where子句中標籤的次數。 – Woot4Moo

0

您需要SUB-選擇組通過如下什麼:?

SELECT T.*, Tags.TagName 
FROM (select DATE_FORMAT(Posts.PostDate, '%Y-%m-%d'), PostTags.FK_TagID, count(*) PostsCount 
from Posts 
join PostTags 
     on Posts.PK_PostID = PostTags.FK_PostID 
group by DATE_FORMAT(Posts.PostDate, '%Y-%m-%d'), PostTags.FK_TagID) as P 
inner join Tags 
     on Tags.PK_TagID = P.FK_TagID