查询 Google 表格中的串联数组

query against concatenated array in Google Sheets

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

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

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

我想要 table 显示每种类型的绿色单元格的数量:

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!

作为解决方法,我使用公式

在 table 中添加了一个 D 列
=arrayformula(if(C2:C5="green", 1, 0))

然后下面的查询有效并给出了期望的结果:

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

但是有没有可能避免这个人为的柱子呢?

IF returns 只有 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))