如何编写query查询语句仅返回列总和大于0的对应列标题
问题排查
首先你原先的QUERY写法存在两个核心问题:
- 语法错误:SELECT子句末尾多了多余逗号,且聚合函数SUM直接用在WHERE子句时没有指定分组规则,QUERY会默认按行计算而非按列求和
- 逻辑不匹配:你需要的是按列总和筛选列,而QUERY原生是行级数据处理工具,没有直接按列筛选的原生逻辑,需要配合其他函数先计算列级条件
可用解决方案
仅返回符合条件的表头
直接用这个公式即可:=TOROW(FILTER(A1:D1, BYCOL(A2:D, LAMBDA(col, SUM(col)))>0))
各部分逻辑说明:
BYCOL(A2:D, LAMBDA(col, SUM(col))):遍历除表头外的所有数据列,逐列计算总和,你提供的样例数据执行后会返回数组{10,0,20,30}FILTER(A1:D1, 上述总和数组>0):用总和大于0的条件筛选第一行的表头,样例场景下会返回Dog、Cat、Horse三个表头TOROW():将结果平铺为一行展示,如需单列展示可替换为TOCOL()
同时返回表头和对应列的所有数据
如果需要连符合条件的列的全部数据一起返回,可使用以下公式:=LET(filtered_headers, FILTER(A1:D1, BYCOL(A2:D, LAMBDA(col,SUM(col)))>0), QUERY(A:D, "Select "&JOIN(",", REGEXREPLACE(filtered_headers, ".+", "Col"&MATCH(filtered_headers, A1:D1, 0))), 1))
内容的提问来源于stack exchange,提问作者C.Sanabria
相关产品推荐
相关产品推荐

