按年份和月份汇总分组

时间:2011-09-05 23:32:12

标签: google-sheets

我的工作表 Movements 包含两个字段:

mydate      | amount
2009-01-01  | 10.00
2009-01-02  | 13.00
2009-02-01  | 11.00
2009-02-05  | 12.00
2009-02-08  | 52.00

我希望在另一个工作表 MonthSum 中显示列金额中的数据总和,按列日期的年份+月份

mydate      | amount
2009-01     | 23.00
2009-02     | 75.00

我不想指定电子表格必须总和的单元格,我想要一个通用的公式来按月/年分组我的数据。如果我在MySQL数据库上,我会这样做:

SELECT DATE_FORMAT('%Y-%m', mydate), SUM(amount) 
FROM mytable GROUP BY DATE_FORMAT('%Y-%m', mydate)

我需要解决方案才能使用 Google Spreadsheets

我认为可能的解决方案是使用SUMIF或数据透视表或Google Spreadsheets QUERY function

6 个答案:

答案 0 :(得分:87)

这是数据透视表的用途。

我已使用您的数据创建了an example

首先,添加一列以将日期格式化为您的月度字符串,例如“2009-01”,其公式为:

TEXT(A2, "YYYY-MM")

enter image description here


然后突出显示数据,并选择“数据”> “数据透视表报告......”

enter image description here


对于行,选择“月”

enter image description here


对于值,请选择“金额”

enter image description here


TADA!就是这样!

enter image description here

有关数据透视表的快速概述,请参阅this Google blog post

答案 1 :(得分:30)

你可以使用数组公式,我把公式放在A2A1中,我把月份数字放在:

=ARRAYFORMULA(SUMPRODUCT(1*(MONTH(Sheet1!$A$2:$A$6)=A1)*Sheet1!$B$2:$B$6))

请参阅doc in action in Google Spreadsheet

[编辑]如果你想要年和月:

=ARRAYFORMULA(SUMPRODUCT(1*(YEAR(Sheet1!$A$2:$A$8)=A2)*(MONTH(Sheet1!$A$2:$A$8)=B2)*Sheet1!$B$2:$B$8))

答案 2 :(得分:11)

除了JMax的贡献, 让我使用QUERY函数提供以下公式...

=query(index('Sheet3'!A:B); "select year(Col1)+(month(Col1)+1)/100,sum(Col2) where Col1 is not null group by year(Col1)+(month(Col1)+1)/100 label year(Col1)+(month(Col1)+1)/100 'mydate',sum(Col2) 'amount' ")

注意: 我假设原始数据在Sheet3中 而我的结果显示年和月组合yyyy.mm而不是yyyy-mm 我创建了一个插图:

yogi

答案 3 :(得分:1)

亚光烧伤和Cœur的答案非常准确,我想添加评论(我没有在评论部分添加它,因为它很长)

您可能希望使用此公式: DATE(YEAR(A2);MONTH(A2);1)按年份分组&一个月。

这样您会将值保留为日期,因此可以在数据透视表中应用任何类型的日期格式或排序。

您可以跳过说明:

而不是TEXT(A2, "YYYY-MM")转换文本中的值,从而消除了有关进一步日期操作的自由。

DATE(YEAR(A2);MONTH(A2);1)删除该日期的日期和时间,例如 2018/05/03 2018/05/06 都成为 2018 / 05/01 这仍然是一个可以归为一组的日期。

直接在数据透视表上应用格式“YYYY-MM”即可获得相同的结果。

答案 4 :(得分:0)

我正在处理类似的问题。我发现这个公式运作良好。

=SUMIF(ARRAYFORMULA(MONTH('Sheet1'!A:A)), A2, 'Sheet1'!B:B)

在单元格A2中,我将我想要的月份合计。

答案 5 :(得分:0)

您需要使用数组方法。如何合并数组,您可以在这里https://stackoverflow.com/a/42488671/1393023

中学习

最重要的QUERY

简单而透明

=QUERY(
  ARRAYFORMULA({TEXT(Movements!A:A,"YYYY-MM"),Movements!B:B}),
  "select Col1,sum(Col2) group by Col1"
)

第二ARRAYFORMULA(SUMIF)

只需将功能组合到链中

=SORT(UNIQUE(FILTER(
  {
    TEXT(Movements!A2:A,"YYYY-MM"),
    SUMIF(EOMONTH(Movements!A2:A,1),EOMONTH(Movements!A2:A,1),Movements!B2:B)
  },
  LEN(Movements!B2:B)
)),1,1)

My example