【问题标题】:How do I group by month and year when only having a datetime field?当只有日期时间字段时,如何按月和年分组?
【发布时间】:2009-10-13 09:47:41
【问题描述】:

我有一个表模式,它本质上是一堆带有日期时间字段的交易信息

TRANSACTION (< transactionid >, amount, when)

我需要生成每月总交易量,即 SUM(amount),但我不知道按什么分组。 SQL 中的每一行都应包含每月总计(因此,1 月 9 日、2 月 9 日...... 2010 年 1 月等一行)。我在想我可能必须通过代码生成表,但想了解是否有办法使用 SQL 解决这个问题。

任何帮助将不胜感激! (使用 MySQL 5.3, PHP5)

【问题讨论】:

  • 新手注意,when 是表列名,不是 MySQL 函数。

标签: php mysql sql


【解决方案1】:

您需要按提取分组。

SELECT 
    SUM(amount)
FROM 
    transaction
GROUP BY 
    EXTRACT(MONTH FROM when),
    EXTRACT(YEAR FROM when)

如果你需要这些列,那么

SELECT
    EXTRACT(MONTH FROM when) as month, 
    EXTRACT(YEAR FROM when) as year, 
    SUM(amount)
FROM 
    transaction
GROUP BY 
    month,
    year

当然,您也可以附加 ORDER BY 并使用短名称:

SELECT 
    EXTRACT(MONTH FROM when) as month, 
    EXTRACT(YEAR FROM when) as year, 
    SUM(amount)
FROM 
    transaction
GROUP BY 
    month, 
    year
ORDER BY 
    year DESC, 
    month DESC

【讨论】:

    【解决方案2】:
        SELECT EXTRACT(YEAR_MONTH FROM when), sum(amount)
          FROM TRANSACTION
      GROUP BY EXTRACT(YEAR_MONTH FROM when)
    

    【讨论】:

      【解决方案3】:

      我一直使用 MONTH() 和 YEAR()...这对我来说似乎有点像 Hack,但它确实有效...

      SELECT SUM(amount) FROM yourTable GROUP BY MONTH(date), YEAR(date)
      

      还是反过来? 认为

      鲍比

      【讨论】:

        【解决方案4】:

        我会尝试这样的:

        SELECT
          YEAR(when) AS year,
          MONTH(when) AS month,
          SUM(amount) AS amount
        FROM
          TRANSACTION
        GROUP BY
          YEAR(when),
          MONTH(when)
        ORDER BY
          YEAR(when),
          MONTH(when)
        

        这适用于 MS SQL,也应该适用于 MySQL。

        【讨论】:

          【解决方案5】:

          我想你想要:

          SELECT SUM(amount)
          FROM yourTable
          GROUP BY CONCAT(YEAR(date), '-', MONTH(date))
          

          【讨论】:

            猜你喜欢
            • 2023-03-28
            • 2017-04-14
            • 1970-01-01
            • 1970-01-01
            • 2017-10-17
            • 2014-03-12
            • 2016-07-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多