查询 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))
我正在尝试 运行 针对多个范围结合 {} 的查询,例如 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))