我有一张包含原始数据的工作表,我希望在另一张工作表中对其进行过滤和排序。
原始数据表
表格的目标是:
Rank
12或以下Name
显示最高Level
Damage
我使用Level
显示并排序ORDER BY
为12或以下的所有项目:
=ARRAYFORMULA(QUERY(RAW!2:1000, "select A,B,D where C<=12 and A<>'' order by D desc"))
按伤害排序
但这仍然显示太多条目。我可以使用MAX()
和GROUP BY
:
=ARRAYFORMULA(QUERY(RAW!2:1000, "select A,max(B) where C<=12 and A<>'' group by A label max(B) ''"))
过滤至仅显示最高排名
但是,我无法按DAMAGE
排序,否则我会收到此错误:
Unable to parse query string for Function QUERY parameter 2:
COL_IN_ORDER_MUST_BE_IN_SELECT: `D`
尝试将该列添加到SELECT
子句会出现此错误:
Unable to parse query string for Function QUERY parameter 2:
ADD_COL_TO_GROUP_BY_OR_AGG: D
错误意味着我不能包含既不是聚合公式(如MAX
)的字段,也不能包含GROUP BY
(DAMAGE
不是)的字段。
我的目标是:
过滤至仅显示按损害排序的最高等级和
我如何查询第一张纸以结束上面的纸张?
这是实际的表格。如果您想测试解决方案,请随意分叉 https://docs.google.com/spreadsheets/d/1XG3eTSc-8eYRh-6ekq_2BjZgleUVCz3v45PLozXe8Xo/edit
答案 0 :(得分:1)
如果您使用查询(不需要arrayformula)
= QUERY(Raw!2:500,“选择A,B,D,其中C&lt; = 12,A&gt;''按D desc排序”)
您可以过滤查询结果以获得所需的输出:
=FILTER(A2:C,MMULT((A2:A=TRANSPOSE(A2:A))*(B2:B<TRANSPOSE(B2:B)),SIGN(ROW(B2:B)))=0)
我没有把两者结合起来。
答案 1 :(得分:0)
这可能是一个微不足道的答案,但可能有助于澄清您的要求。如果您的测试数据中max(损坏)与max(rank)在同一行,您可以放
=ARRAYFORMULA(QUERY(Raw!2:1000, "select A,max(B),max(D) where C<=12 and A<>'' group by A order by max(D) desc label max(B) '', max(D) ''"))
如果您想要的是通常按“与最高等级相对应的伤害值”进行排序,则答案会更复杂!