问题是由于 QUERY 的性质而发生的,因为 QUERY 的每一列只能返回一种类型的数据(例如,文本 或 数字,但不能同时返回两者)。在一列中存在多种数据类型的情况下,QUERY 将返回该列中人口最多的类型。在您的情况下,您已插入“-”代替空值,即文本。我猜您的数组公式在您的数据集之后用该连字符填充了 整个列 的空单元格,从而使文本成为该列中人口最多的类型。因此,您所有的百分比都被转换为文本。并且以文本的降序排列,例如,9.25%(作为字符串)比 25%“高”,因为前者以“9”开头,而后者以“2”开头。
解决此问题的一种方法是从您的“图书评分”!J2 数组公式中删除“-”并将其替换为 IFERROR(1/0),这将使这些单元格为空而不是用连字符填充.这将使数字成为该列中人口最多的类型,并且您的 QUERY 将按预期工作。
以 E13 为例,这是您的原始公式:
=Query('Book Rating'!$A$1:$K,"Select A,J where A<>'' Order by J Desc Limit 10")
如果您想在数组公式中保留该连字符,这里有一些方法可以保留“图书评分”!J2 数组公式,因为我怀疑您有它,而不是更改您的 QUERY 公式:
1.) 在执行查询之前预先过滤“图书评分”数据:
=Query(FILTER('Book Rating'!$A:$K,'Book Rating'!J:J<>"-"),"Select Col1,Col10 Where Col1 <> '' Order by Col10 Desc Limit 10",1)
2.) 一起使用 SORTN 和 FILTER 而不是 QUERY,因为 FILTER 可以处理同一列中的多种数据类型:
=ArrayFormula({"Books","6 Stars";SORTN(FILTER({'Book Rating'!A2:A,'Book Rating'!J2:J},ISNUMBER('Book Rating'!J2:J)),10,0,2,0)})