【问题标题】:query against concatenated array in Google Sheets查询 Google 表格中的串联数组
【发布时间】:2020-03-18 11:11:31
【问题描述】:

我正在尝试针对多个结合了 {} 的范围运行查询,例如 query({A2:C5, if(C1:C5='something',1,0)}, "select ...")。但我得到了一个#REF!错误消息Function ARRAY_ROW parameter 2 has mismatched row size. Expected: 4. Actual: 1. 这是什么原因?

这里有一个详细的例子。假设我有一张这样的桌子:

id  kind    color
1   a   green
2   a   green
3   b   green
4   c   blue

我想要一个表格,显示每种类型的绿色单元格数量:

kind    color_count
a   2
b   1
c   0

最初,我尝试使用 where 子句进行查询:

=query(A2:C5, "select B, count(C) where C='green' group by B", -1)

但这不包括零值的行。所以我尝试添加一个额外的列,其值为 1 为绿色,否则为 0,并在没有 where 子句的情况下使用 SUM:

=query({A2:C5, if(C2:C5="green", 1, 0)}, "select B, sum(D) group by B", -1)

但这给出了上面的 $REF!

作为一种解决方法,我使用公式在表格中添加了 D 列

=arrayformula(if(C2:C5="green", 1, 0))

然后下面的查询会起作用并给出想要的结果:

=query(A2:D5, "select B, sum(D) group by B", -1)

但是有没有可能避免这种人为的列?

【问题讨论】:

    标签: if-statement google-sheets google-sheets-formula array-formulas google-sheets-query


    【解决方案1】:

    IF 仅返回 1 个单元格,除非您使用 ARRAYFORMULA。所以错误就在现场,因为一侧有 4 个单元格,另一侧有 1 个单元格。

    尝试:

    =ARRAYFORMULA(QUERY({B:B, IF(C:C="green", 1, 0)}, 
     "select Col1,sum(Col2) 
      where Col1 is not null 
      group by Col1 
      label sum(Col2)''", 0))
    

    【讨论】:

    • 我试过 =arrayformula(query({A2:C5, if(C2:C5="green", 1, 0)}, "select B, sum(D) group by B", - 1))。但这给了价值!错误:无法解析函数查询参数 2 的查询字符串:NO_COLUMN:B。第二个建议给出了错误的答案。最后一行应该是 c 0
    • 我意识到我必须使用 Col1、Col2 而不是 A、B 等作为列名。然后事情就开始了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 2014-03-27
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    相关资源
    最近更新 更多