QUERY函数输出结果能否同时实现排序并显示对应标签?
基础版(仅展示有消费记录的分类,带标签+降序排列)
直接修改你原有的QUERY语句,补充分类列选择、排序规则和标签定义即可:
=QUERY(C3:D64, "SELECT C, SUM(D) WHERE C <> 'Income' GROUP BY C ORDER BY SUM(D) DESC LABEL C '消费分类', SUM(D) '消费总金额'")
返回结果为两列:第一列是消费分类标签,第二列是对应分类的总消费额,自动按金额从高到低排序,表单新增数据后会同步更新结果。
进阶版(同时展示无消费记录、求和为0的分类)
如果需要全量展示所有已设置的消费分类,即使当期没有消费也显示金额为0,使用以下公式即可:
=ArrayFormula(LET( // 提取所有非收入的不重复消费分类 all_cats, UNIQUE(FILTER(C:C, C:C<>"", C:C<>"Income")), // 计算已有消费记录的分类求和结果 sum_res, QUERY(C3:D64, "SELECT C, SUM(D) WHERE C <> 'Income' GROUP BY C LABEL C '', SUM(D) ''"), // 关联所有分类的求和值,无消费记录默认返回0,再按金额降序排序 SORT(HSTACK(all_cats, IFERROR(VLOOKUP(all_cats, sum_res, 2, 0), 0)), 2, FALSE) ))
如果你的表格版本不支持LET函数,可使用嵌套写法实现相同效果:
=ArrayFormula(SORT(HSTACK(UNIQUE(FILTER(C:C, C:C<>"", C:C<>"Income")), IFERROR(VLOOKUP(UNIQUE(FILTER(C:C, C:C<>"", C:C<>"Income")), QUERY(C3:D64, "SELECT C, SUM(D) WHERE C <> 'Income' GROUP BY C LABEL C '', SUM(D) ''"), 2, 0), 0)), 2, FALSE))
如果需要限定统计的日期范围,可在QUERY的WHERE条件中补充日期判断规则,例如统计2024年全年消费的话,将WHERE子句修改为WHERE C <> 'Income' AND B >= date '2024-01-01' AND B <= date '2024-12-31'即可。
内容的提问来源于stack exchange,提问作者Oliver
相关产品推荐
相关产品推荐

