Google Sheets QUERY函数:实现月份chronological排序与金额向上取整的技术问询
搞定Google Sheets QUERY的两个核心问题:时间序月份排序+金额向上取整
我来帮你解决这两个困扰的问题,分两步拆解:
1. 让月份按时间顺序排列,而非字母顺序
你当前的QUERY按月份名称的字母排序(比如April会排在January前面),要改成 chronological 顺序,关键是把月份名称转成对应的数字(1代表1月,2代表2月…),再按数字排序。在Google Visualization API的QUERY语法里,我们可以这么操作:
- 用
DATE(C & " 1")把月份名称转成具体日期(比如"January"变成"January 1"对应的日期值) - 再用
MONTH()函数提取这个日期的月份数字 - 最后按这个数字排序,就能实现时间顺序了
2. 正确把金额向上取整到下一个100美元
你之前用%运算符的思路不对,其实Google Visualization API自带了适合的函数:
- 如果需求是取大于等于总金额的最小100美元倍数(比如500美元→500美元,501美元→600美元),直接用
CEILING(sum(B), 100)就可以,这个函数专门用来向上取整到指定倍数 - 如果你的需求是不管金额是不是整百,都强制取下一个整百(比如500美元→600美元),那用
100 * (FLOOR(sum(B)/100) + 1)就行
整合后的最终公式
把这两个逻辑结合起来,替换你当前的公式:
=query(other_expenses!B1:C,"select C, sum(B), CEILING(sum(B), 100) group by C order by MONTH(DATE(C & ' 1'))", -1)
公式细节解释:
select C, sum(B), CEILING(sum(B), 100):分别输出月份名称、当月总费用、向上取整后的金额group by C:按月份分组汇总order by MONTH(DATE(C & ' 1')):按月份对应的数字排序,确保1月到12月的时间顺序-1:保留原数据的表头行
要是你需要的是强制进一位的取整(比如500美元也要变成600美元),把公式里的CEILING(sum(B), 100)换成100 * (FLOOR(sum(B)/100) + 1)就可以了。
你可以把这个公式放到expenses_by_month工作表里测试,应该就能得到你想要的结果啦。
内容的提问来源于stack exchange,提问作者Mark Nahabedian
相关产品推荐
相关产品推荐

