1

次の2つのテーブルがあります。

投稿

  • post_id
  • 記事のタイトル
  • post_timestamp

コメント

  • comment_id
  • posts_post_id
  • コメント内容
  • コメント_タイムスタンプ

週ごとの投稿数とコメント数を示すレポートを作成したいと考えています。このようなもの:

Week    StartDate      Posts     Comments
1       1/1/2012       100        305
2       1/8/2012       115        412

このクエリがありますが、Posts テーブルからのみ取得します。

select makedate( left(yearweek(p.post_timestamp),1),week(p.post_timestamp, 2 ) * 7 ) as Week, COUNT(p.post_id) as Posts  
FROM cl_posts p
GROUP BY Week
ORDER BY WEEK(p.post_timestamp)

コメント数も追加するにはどうすればよいですか?

4

2 に答える 2

3

次のようなものが必要だと思います:

select
  week(post_timestamp) as Week,
  adddate(date(post_timestamp), INTERVAL 1-DAYOFWEEK(post_timestamp) DAY) as StartDate,
  count(distinct post_id),
  count(comment_id)
from
  posts left join comments
  on comments.posts_post_id = posts.post_id
group by Week, StartDate
于 2012-12-06T15:06:18.363 に答える
0

これが1つの方法ですjoin

select coalesce(p.week, c.week) as week, p.Posts, c.Comments
from (select makedate( left(yearweek(p.post_timestamp),1),week(p.post_timestamp, 2 ) * 7 ) as Week,   
             COUNT(*) as Posts  
      FROM cl_posts p
      GROUP BY Week
     ) p full outer join
     (select makedate( left(yearweek(c.comment_timestamp),1),week(c.comment_timestamp, 2 ) * 7 ) as Week,   
             COUNT(*) as Comments
      FROM cl_comments c
      GROUP BY Week
     ) c
     on p.week = c.week
order by 1 

別の結合タイプの代わりに使用している理由はfull outer join、いずれかのカウントが0の場合でも週を保持するためです。テーブルを結合しない理由は、おそらくコメント日までにレポートが必要なためです。 、コメントに関連付けられた投稿の投稿日ではありません。

于 2012-12-06T15:08:12.803 に答える