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

次のように、グループを 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 に答える
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句を使用する必要があり、タグ名が出力にある場合は、タグ名でもグループ化する必要があります。(そうでなければ、日付が同じでタグ名が異なる行が複数ある場合、特定の日付の1つの行に対してどのタグ名を出力する必要がありますか? ....

 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)

日付が同じでタグ名が異なる複数の行が存在する可能性がある場合は、個別の tagName ごとにカウントする必要があるため、tagname でグループ化する必要もあります。これは、あなたの望むことですか ?

于 2012-12-28T14:40:29.523 に答える