【问题标题】:Sum rows sql for each month每个月汇总行sql
【发布时间】:2014-08-15 08:18:11
【问题描述】:

我正在尝试进行 SQL 查询,但在尝试了 12 小时后我决定打开一个主题,也许有人可以帮助我:

我的表是“事务”:

id | client_id |         date          | income |    
1  | 100       | 2014-07-14 10:25:06   | 100    |    
2  | 101       | 2014-07-11 20:25:06   | 200    |
3  | 102       | 2014-08-01 22:25:06   | 150    |
4  | 101       | 2014-08-01 22:25:06   | 300    |
5  | 101       | 2014-08-01 22:25:06   | 300    |

我需要计算每个月(一月、二月、三月……)所有“收入”的总和

从上表可以得出:

July: 300 EUR 
August: 750 EUR

有人可以帮我找到正确的 SQL 吗?

我需要用php打印出来,我应该用什么代码? 我真的需要你的帮助。

【问题讨论】:

  • 您需要按月分组。没有通用的 SQL 解决方案,因为日期时间函数没有被 ANSI 标准统一,并且每个 RDBMS 的实现方式不同。因此,你需要告诉你正在使用什么数据库
  • @cha:实际上它由标准定义的:extract(month from date_column)
  • @a_horse_with_no_name:谢谢。很高兴知道。 SQL Server 虽然不支持它
  • @cha: 但我们不知道 FullDISK 是否在使用 SQL Server。
  • 不,我们没有,但我们已经解码他们使用 PHP :)

标签: sql sum


【解决方案1】:

我不知道你使用的是什么SQL格式,我面前也没有环境,但它会是这样的。

SELECT derivedTable.MonthDate, sum(derivedTable.income)
FROM
(
  SELECT FORMAT(inp.DATE, 'mmyy') as MonthDate, income FROM transactions
) derivedTable(MonthDate, income)
GROUP BY derivedTable.MonthDate

【讨论】:

  • 这取决于您使用的语言。您打印该行然后转到下一条记录。
【解决方案2】:

您需要使用一个函数来截断日期和组。此功能因 DBMS 而异。在 Oracle 中会是这样的:

SELECT TRUNC(date,'YYYY-MON'), SUM(income) FROM table1
GROUP BY TRUNC(date,'YYYY-MON')

例如在 MySQL 中你可以使用DATE_FORMAT()

【讨论】:

    【解决方案3】:

    试试这个:

    SELECT DATEPART(MONTH,[DATE]) AS 'DATE', SUM(income) AS 'Sum' from #transactions
    Group BY DATEPART(MONTH,[DATE])
    

    【讨论】:

    • 我该怎么办?我需要在 php 中打印这个查询。你能帮我找到代码吗?
    猜你喜欢
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    相关资源
    最近更新 更多