谷歌表格查询奇怪的行为

时间:2021-05-09 15:41:58

标签: google-sheets google-sheets-formula

几天来我一直在思考这个问题,我正在使用谷歌工作表中的查询功能来提取数据子集,但是如果我向其中添加一个值,则查询正在运行特定的几个字段,查询结果都是不稳定的(技术术语)。公式:

=QUERY(A3:X,"SELECT F,P WHERE D='G' AND P IS NOT NULL ORDER BY P")

它似乎在大多数情况下都很好用: working query function

但是,如果我在 P 列(这些屏幕截图中的第 5 列)中添加另一个值,我会得到一些奇怪的行为:

Merle Hawkins 是第一条记录,当我将一个值添加到 Merle 的 P 列时,它可以工作,但是当我将一个值(任何值)添加到下一条记录时,我得到: first issue - wrong record 正如您可能注意到的,Merle 在查询结果中显示,没有值,但不应该。我实际上应该在查询结果中看到 Frank Hudson 和 5

我注意到的另一个/不同的奇怪行为是当一个值添加到第 4 条记录/行时,它看起来像这样: 2nd issue - combined first row 这里,查询返回的第一行是前 3 条记录的串联(即使它们都没有在查询结果集中有值)

数据本身是零星的,因为并非所有字段都会被填充,所以我的 where 子句只提取非空值。这些值也是数字和文本的混合,如屏幕截图所示。一些数据字段(在同一列中)是数字,其他是文本 - 也许我需要做一个更好的 WHERE 子句来选择字段?

我在本文档的几张纸上对 =query 函数和 =filter 函数进行了多种变体,这是唯一导致问题的变体。我已经创建了数据表的几个副本,我已经重新开始了一个新的表,但继续遇到这个问题,我不知道为什么会发生这种情况。

TIA 寻求任何帮助

3 个答案:

答案 0 :(得分:0)

query() 函数每列仅支持一种数据类型。列的类型由列中的大多数值决定。

您的数据似乎在每列中混合了数字和文本字符串。如果列中的大多数值是数字,则文本字符串将作为空值返回。如果列中的大多数值是文本字符串,则数字将作为空值返回。

一种解决方法是将列的格式设置为格式 > 数字 > 纯文本。这将使 query() 将所有内容都视为文本。

另一种解决方法是使用 filter() 而不是 query()

答案 1 :(得分:0)

QUERY 函数不适用于包含混合数据类型的列。 QUERY 将自动确定列类型并忽略异常。因此,如果您有一列主要包含数字,QUERY 将忽略少数文本项。

答案 2 :(得分:0)

正如我所怀疑的那样,因为数据集是一种混合数据类型,所以我需要更深入地研究方程的复杂性。我最终使用混合数据列上的 TO_TEXT 重写函数以将非文本字段转换为文本,这样就可以编写 WHERE 子句,只需检查非空文本字段,并更简洁地构建我的数据集.

=ArrayFormula(QUERY({A3:F,TO_TEXT(P3:P)},"SELECT Col6,Col7 WHERE Col4='G' AND Col7 IS NOT NULL ORDER BY Col7"))

感谢@doubleunary 和@Aresvik 为我指明了正确的方向