2017-06-30 52 views
1

我有一張表格,裏面保存了我想要在另一張表格中進行過濾和排序的原始數據。我如何爲只有一列的GROUP BY,同時仍然可以通過並選擇其他列?

原始數據片
Raw data

片材的目標是:

  • 只顯示最高RankNameLevel 12或低於
  • 排序從最高到的結果最低Damage

我展示和排序的所有項目進行的12或以下使用ORDER BY一個Level

=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` 

並嘗試添加該公司lumn到SELECT節給出此錯誤:

Unable to parse query string for Function QUERY parameter 2: 
ADD_COL_TO_GROUP_BY_OR_AGG: D 

的錯誤意味着我不能包括不是任一聚合式(像MAX)或不是GROUP BY的一部分(其DAMAGE不是)字段。

我的目標是:

篩選,僅顯示最高等級受到傷害
Goal

排序我怎麼會去查詢第一板與上述落得片?


以下是實際工作表。如果您想測試解決方案,請隨時分叉。
https://docs.google.com/spreadsheets/d/1XG3eTSc-8eYRh-6ekq_2BjZgleUVCz3v45PLozXe8Xo/edit

回答

1

如果您從您的查詢工作(無需ARRAYFORMULA)

= QUERY(原2:500,「選擇A,B,d其中C < = 12和A <> ''爲了通過d降序「)

您可以過濾查詢結果,讓您所需的輸出:

=FILTER(A2:C,MMULT((A2:A=TRANSPOSE(A2:A))*(B2:B<TRANSPOSE(B2:B)),SIGN(ROW(B2:B)))=0) 

我還沒有成功,兩者結合。

+0

這似乎完成了工作!現在,我只是想在接受它之前瞭解它是如何工作的。這次真是萬分感謝。 – Koviko

+0

MMULT在A中的每個唯一值的B中找到最高值。'*'是和('+'將是或)。過濾器,與查詢不同,保留C列。簽名將True/False更改爲數字1/0。 –

0

這可能是一個微不足道的答案,但可能有助於澄清您的要求。在您的測試數據的情況下最大(傷害)是同一行之最高(職級)的,你可以把

=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) ''")) 

如果你想要的是「造成的傷害值,一般以那種對應最高等級',那麼答案就更復雜了!

+1

雖然這個答案在技術上是正確的,但我的目標是根據「Level」,「Rank」和「Name」選擇行,然後返回所有關聯的單元格。這確實回答了實際問題,但不是問題的精神。 – Koviko

相關問題