根据条件对最后 N 个值求和

SUM last N values with criteria

我有一个简单的 table,看起来像这样:

我只需要计算特定球员 (John) 在过去 3 场比赛中的总分。

我能够得出这个公式:

SUMPRODUCT(LARGE((A2:B="John")*(C2:D);{1;2;3})) 

问题是它不是我要找的东西,而是对最高的 3 个值求和,可以是该范围内的任何位置。

是否有类似的公式,只能进行最后 3 次匹配?

方法

我会使用查询公式来获取您需要的单元格,以便您可以利用 limit 语句。

您应该放置一个带有索引的列,以便您可以按降序排列单元格并取前 3 个。

鉴于您的 table headers 是:

+-----------------------------------------------+
| INDEX | NAME 1 | NAME 2 | POINTS 1 | POINTS 2 |
+-----------------------------------------------+

我会使用此查询来获得您想要的结果:

=SUMPRODUCT(QUERY(A2:E, "Select D * E where B = 'John' or C = 'John'" order by A desc limit 3"))

我想我有一个公式可以满足您的需求。它不是很漂亮,我相信它可以变得更简单,但这很有效:

=query( query(
       { arrayformula(   {ROW(A1:A)         } ),
         query(A1:D,"select A, B, C, D",1)
       } , "select * order by Col1 desc",1),
 "select Col2, Col3, Col4, Col5    
  where (Col2 ='John' or Col3 = 'John')   
  order by Col1 desc limit 3",1)

基本上,它将行号作为一个额外的列添加到数据中,这样我们就可以按行号倒序对数据进行排序。然后我们查询结果以在 Col A 或 Col B 中找到 'John' 的前三个出现。

这是一个示例 sheet: https://docs.google.com/spreadsheets/d/1-mhTb5Cpp3D-1OltlmCfwlmM-vc2OknHxfJAyHD7BjI/edit?usp=sharing

感谢 Erik Tyler 先前对另一个问题的回答,关于如何将行号添加到查询。

编辑:更新了 sheet 以提供约翰(或任何球员)最近三场比赛的得分总和。如果你想在某处放置一个公式,这可以与前面的公式结合使用。或者您是否有所有球员的名单,并且您希望在他们每个人的名字旁边显示他们的最后三个得分?

如果我可以简化公式,我会在这里更新。

如果您还需要其他东西,或者这是否已经回答了您的问题,请告诉我。

我认为 SUMPRODUCT 可以通过使用 COUNTIFS() 和 ROW() 的一些构造数组来获取最新的 3。

这个公式:

=SUMPRODUCT((COUNTIFS(A:B,G2,ROW(A:B)*{1,1},">="&ROW(A:B)*{1,1})<=3)*(A:B=G2),C:D)

this sheet 我做的似乎有效。