Google sheets 按年度和月份汇总分组

Google sheets 按年度和月份汇总分组,google-sheets,Google Sheets,我有一个带有两个字段的工作表: 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中显示列金额中的数据总和,按列日期的年+月分组: 我不想指定电子表格必须求和的单元格,我想要一个通用公式来对每月+每年的数据进行分组。如果我使用的是MySQL数据库,我只需执行以下操作: S

我有一个带有两个字段的工作表:

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中显示列金额中的数据总和,按列日期的年+月分组:

我不想指定电子表格必须求和的单元格,我想要一个通用公式来对每月+每年的数据进行分组。如果我使用的是MySQL数据库,我只需执行以下操作:

SELECT DATE_FORMAT('%Y-%m', mydate), SUM(amount) 
FROM mytable GROUP BY DATE_FORMAT('%Y-%m', mydate)
我需要在谷歌电子表格上工作的解决方案


我认为可能的解决方案是使用SUMIF或pivot表或Google电子表格查询。

你可以使用数组公式,我把公式放在
A2
中,在
A1
中,我把月数放在:

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

[编辑]如果您同时需要年和月:

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

除了JMax的贡献, 让我使用查询函数给出以下公式

=query(index('Sheet3'!A:B);“选择年(Col1)+(月(Col1)+1)/100,求和(Col2),其中Col1不为空,按年分组(Col1)+(月(Col1)+1)/100标签年(Col1)+(月(Col1)+1)/100‘我的日期’,求和(Col2)‘金额’”
注: 我假设原始数据在表3中 我的结果显示年份和月份组合为yyyy.mm,而不是yyyy-mm 我创建了一个示例:

这就是透视表的用途

我已经创建了使用您的数据

首先,添加一列,将日期格式化为您的每月字符串,例如“2009-01”,公式如下:
TEXT(A2,“YYYY-MM”)


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


对于行,选择“月”


对于值,选择“金额”


塔达!就这样!


有关透视表的快速概述,请参阅。

我正在处理一个类似的问题。我发现这个公式很有效

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

在单元格
A2
中,我把我想要的月份加起来。

马特·伯恩斯和Cœur的回答非常准确,我想添加一条评论(我没有在评论部分添加它,因为它很长)

您可能希望改用以下公式:
日期(年(A2);月(A2);1)
按年份和月份分组

通过这种方式,将值保留为日期,因此可以在透视表中应用任何类型的日期格式或排序


您可以跳过的说明:

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

日期(年(A2);月(A2);1)
从日期中删除日期和时间,例如2018/05/03和2018/05/06都成为2018/05/01,这仍然是一个可以组合在一起的日期


通过直接在数据透视表上应用格式“yyy-MM”,您可以获得相同的结果。

您需要使用数组方法。如何组合阵列,您可以在此处学习

最前面的
查询
它简单而透明

=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)

我希望金额列按年+月分组,而不仅仅是month@ashes999当前位置我建议您提出一个新问题,并添加一个指向此答案的链接,这样您将获得更广泛的受众,甚至可能更多answers@TilmanVogel:我已经检查了链接,无论我是否登录,它似乎都能工作。@JMax不在这里(我已登录):第1页的日期是法文的,第2页的C列有“#VALUE”错误。@TilmanVogel:好的,知道了。我已经更正了我的公式(和数据),很抱歉这个#值。这正是我想要的,而且很简单。足够公平@pnuts,谢谢您的编辑。这可能只是一个视网膜屏幕的东西,这意味着我有高分辨率的屏幕截图;)专业提示:如果源数据将增长,请从
Sheet1编辑范围!A1:C6
仅按列参考数据:
Sheet1!答:C
使用数据透视表而不是奇怪的公式,这是一个很好的答案。只是用过了。很有趣,但是10月份显示的是“2020.1”而不是“2020.10”
=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)