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)