代码之家  ›  专栏  ›  技术社区  ›  Mike Trpcic

按列分组时选择计数为零

  •  3
  • Mike Trpcic  · 技术社区  · 14 年前

    SELECT COUNT(*) AS 'count', 
           WEEK(j.created_at) AS 'week',
           MONTH(j.created_at) AS 'month', 
           YEAR(j.created_at) AS 'year', 
           DATE_FORMAT(j.created_at, '%y') AS 'short_year'
    FROM jobs j WHERE j.state <> 'draft' 
                AND created_at > '2010-06-21'
                AND created_at < '2010-08-01'
    GROUP BY WEEK(j.created_at)
    ORDER BY WEEK(j.created_at)
    

    为了改变我的时间表,我只需改变 GROUP BY WEEK MONTH ,我是按月计算的,而不是按周计算的。

    count week  month  year short_year
        3   25      6  2010         10
        2   26      6  2010         10
        2   27      7  2010         10 
        1   28      7  2010         10
        3   30      7  2010         10
    

    您会注意到,第29周没有数据,应该是一行count(0)。有没有什么方法可以在保持更改分组的灵活性的同时获得0 count行 ?

    1 回复  |  直到 14 年前
        1
  •  3
  •   Martin Smith    14 年前

    创建一个包含每个日期和外部连接的辅助日历表(如果需要,下面可能需要调整) created_at 有时间成分)

    SELECT COUNT(*) AS 'count', 
           WEEK(c.date) AS 'week',
           MONTH(c.date) AS 'month', 
           YEAR(c.date) AS 'year', 
           DATE_FORMAT(c.date, '%y') AS 'short_year'
    FROM calendar c
    LEFT OUTER JOIN jobs j ON j.created_at = c.date
                AND j.state <> 'draft' 
    WHERE c.date > '2010-06-21'
                AND c.date < '2010-08-01'
    GROUP BY WEEK(c.date)
    ORDER BY WEEK(c.date)