代码之家  ›  专栏  ›  技术社区  ›  James Skidmore

按日期分组时,如何使MySQL返回空日?

  •  0
  • James Skidmore  · 技术社区  · 15 年前

    我有一个MySQL查询,如下所示:

    SELECT DAYNAME(CreatedAt) AS TheDay, SUM(Amount) AS TheSum
    FROM OrderTransactions
    GROUP BY TheDay
    
    # Returns an array like:
    # Array
    # (
    #     [0] => Array
    #         (
    #             [TheDay] => Thursday
    #             [TheSum] => 0.02
    #         )
    # 
    #     [1] => Array
    #         (
    #             [TheDay] => Wednesday
    #             [TheSum] => 0.02
    #         )
    # 
    # )
    

    我还有一个条款,只选择上周的交易。但是,如果在某些日期没有交易,我怎么能让它在每空一天返回0.00美元的金额?

    1 回复  |  直到 15 年前
        1
  •  1
  •   David Snabel-Caunt    15 年前

    一般来说,这里的技巧是与你选择的相反方向结合。

    假设您有一个表daynames,其值为“星期一”、“星期二”…'周日在野外 name .

    SELECT DAYNAME(CreatedAt) AS TheDay, SUM(Amount) AS TheSum
      FROM OrderTransactions
      GROUP BY TheDay
    UNION
    SELECT `name`, 0 FROM daynames
      WHERE daynames.name NOT IN (SELECT DISTINCT DAYNAME(CreatedAt) FROM OrderTransactions) 
    

    如果没有日期函数,通常不需要daynames查找表。在这种情况下,我不知道如何避免它。

    推荐文章