我如何只为一列GROUP BY,同时仍然能够排序并选择其他列?

时间:2017-06-30 18:59:25

标签: google-sheets

我有一张包含原始数据的工作表,我希望在另一张工作表中对其进行过滤和排序。

原始数据表
Raw data

表格的目标是:

  • 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"))

按伤害排序
Sorted

但这仍然显示太多条目。我可以使用MAX()GROUP BY

过滤条目

=ARRAYFORMULA(QUERY(RAW!2:1000, "select A,max(B) where C<=12 and A<>'' group by A label max(B) ''"))

过滤至仅显示最高排名
Grouped

但是,我无法按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 BYDAMAGE不是)的字段。

我的目标是:

过滤至仅显示按损害排序的最高等级
Goal

我如何查询第一张纸以结束上面的纸张?

这是实际的表格。如果您想测试解决方案,请随意分叉 https://docs.google.com/spreadsheets/d/1XG3eTSc-8eYRh-6ekq_2BjZgleUVCz3v45PLozXe8Xo/edit

2 个答案:

答案 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) ''"))

如果您想要的是通常按“与最高等级相对应的伤害值”进行排序,则答案会更复杂!

相关问题