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'

结果如下所示:

在此处输入图像描述

但我希望它按日期分组,然后在它旁边是标签的使用次数。我想不通。像这样的东西:

2012-12-26 10
2012-12-27 4
4

5 回答 5

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')
于 2012-12-28T14:37:49.553 回答
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

于 2012-12-28T14:40:15.243 回答
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
于 2012-12-28T14:40:28.323 回答
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)

如果可以有多行具有相同的日期但不同的标签名称,您需要每个不同标签名称的计数,那么您也需要按标签名称分组。这是你想要的吗 ?

于 2012-12-28T14:40:29.523 回答
0

您需要按以下方式对组进行 SUB-SELECT:

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
于 2012-12-28T14:51:12.403 回答