从列表中返回MAX值(前1和2)

时间:2017-12-28 09:41:46

标签: google-sheets max vlookup

我有一张Google表格,其中包含不同玩家攻击的数据及其相应的伤害。

Sheet 1中

| Player   | Attack  | Damage |
|:---------|:-------:|-------:|
| Iron Man | Melee   | 50     |
| Iron Man | Missile | 2500   |
| Iron Man | Unibeam | 100    |
| Iron Man | Dash    | 125    |
| Superman | Melee   | 9000   |
| Superman | Breath  | 200    |
| Superman | X-ray   | 0      |
| Superman | Laser   | 1500   |
| Hulk     | Smash   | 500    |
| Hulk     | Throw   | 500    |
| Hulk     | Stomp   | 500    |
| Hulk     | Jump    | 325    |

在我的第二张表中,我想列出每个玩家并显示他们的两个最佳攻击和相应的伤害。像这样:

Sheet 2中

| Player   | #   | Attack  | Damage | Comment   |
|:---------|:---:|:-------:|-------:|----------:|
| Iron Man | 1   | Missile | 2500   |           |
| Iron Man | 2   | Dash    | 125    |           |
| Superman | 1   | Melee   | 9000   | Very nice |
| Superman | 2   | Laser   | 1500   |           |
| Hulk     | 1   | Smash   | 500    |           |
| Hulk     | 2   | Stomp   | 500    |           |

更新
如果发生这种情况,某些攻击可能产生完全相同的伤害 - 我只想按字母顺序返回第一个。

我现在使用以下公式:
损坏栏:=MAX(FILTER(Sheet1!C:C,Sheet1!A:A=A2))
攻击栏:=JOIN(",",FILTER(Sheet1!B:B,Sheet1!A:A=A2,Sheet1!C:C=C2))

这将返回最佳攻击/伤害。例如,在第1/2行:

| Player   | #   | Attack  | Damage | Comment   |
| Iron Man | 1   | Missile | 2500   |           |
| Iron Man | 2   | Missile | 2500   |           |

但不是次佳。如何修改第二行的公式以返回次佳攻击/伤害?

更新
在第二行中使用=LARGE(Sheet1!C:C;B3)我可以从Sheet1获得第二次最佳攻击,但它不会在播放器上进行分段。

更新2:
=ArrayFormula(LARGE(IF(Player="Iron Man",Damage),B2))(使用命名范围)返回第一和第二最佳伤害。仍试图找出如何返回攻击名称。

4 个答案:

答案 0 :(得分:2)

根据您提供的数据,我可以使用以下公式产生预期结果:

=query({ArrayFormula(iferror(SORT(ROW(Sheet1!A2:A),SORT(ROW(Sheet1!A2:A),Sheet1!A2:A,1),1)-MATCH(Sheet1!A2:A,SORT(Sheet1!A2:A),0))) , sort(A2:C, 1, 0, 3, 0)}, "Select Col2, Col1, Col3, Col4 where Col1 < 3 ")

看看你是否可以使用它来处理你的数据。

Illustration

Sample link

编辑:根据以下评论,这里是更新版本。

=query({ArrayFormula(iferror(SORT(ROW(Sheet1!A2:A),SORT(ROW(Sheet1!A2:A),Sheet1!A2:A,1),1)-MATCH(Sheet1!A2:A,SORT(Sheet1!A2:A),0))) , Sheet1!A2:C}, "Select Col2, Col1, Col3, Col4 where Col1 < 3 order by Col2")

答案 1 :(得分:1)

我使用了两种不同的公式:

  1. 每位玩家获得最大伤害=FILTER(FILTER($D$3:$D$10,$B$3:$B$10 = $F3), FILTER($D$3:$D$10,$B$3:$B$10 = $F3) = LARGE(FILTER(D3:D10,B3:B10 = $F3),$G3))
  2. 获得攻击=INDEX($C$3:$C$10, MATCH($F3&$I3,$B$3:$B$10&$D$3:$D$10, 0))
  3. enter image description here

答案 2 :(得分:1)

给予JPV学分但是用它来获得另一张纸的答案:

=查询({ARRAYFORMULA(IFERROR(SORT(ROW(Sheet 1中!A2:B),SORT(ROW(Sheet 1中!A2:A),工作表Sheet A2:!A,1),1) - 匹配(Sheet 1中A2 :A,SORT(Sheet1!A2:A),0)-ROW()+ 1)),sort(Sheet1!A2:C,1,1,3,0)},“选择Col2,Col1,Col3,Col4其中Col1 <3“)

答案 3 :(得分:0)

请试试这个公式:

=QUERY({Sheet1!$A$2:$C}, "select Col2, Col3 where Col1 = '"&A2&"' order by Col3 desc limit 1 offset "&B2-1)

enter image description here

它按Col3-metric对数据进行排序,并将结果限制为1行,并抵消结果,因此您拥有前1,2等依此值。在我的示例中,超人有两个相同的值:9000,公式首先输入“Melee”,因为它位于表格的第一个位置,但您可以在查询文本中对其进行排序以获得字母顺序