【问题标题】:Google Sheets QUERY function谷歌表格查询功能
【发布时间】:2021-05-20 14:43:12
【问题描述】:

我正在尝试创建一个查询函数,该函数将根据 f 列中的内容对 B、C 和 D 列中的数字进行平均

示例:

buckape 1000    10  1000    defense e6vowe0
aiden   500 9   900 defense e6vowe0
faxyst  400 8   800 defense e6vowe0
lumi    300 4   500 defense e6vowe0
refresh 200 2   400 defense e6vowe0
sahsook 100 1   200 defense e6vowe0
doltic  0   1   100 defense e6vowe0 

目前,我能够将按 F 列分组的行平均化,如下所示:

=Query(A:F, "select F, avg(B), avg(C), avg(D) where F is not null and E='defense' group by F",-1)

这反过来又会导致我按 ID 显示平均值(这很好)

event ID    avg heal    avg kills   avg damage
e6vowe0     357.14      5.00        557.14
hfgk3og0    514.29      5.29        814.29

但是,我正在努力让它(希望使用相同的公式)也除以每个原始数字(即 B2 / 基于 F 的 B 的平均值),然后对列 C 和 D 也重复该过程。

希望这是有道理的,希望这里有人比我更了解查询功能。谢谢

【问题讨论】:

  • 分享您的工作表副本以及所需结果的示例

标签: arrays function google-sheets google-sheets-formula google-query-language


【解决方案1】:

尝试:

=ARRAYFORMULA(IF(A2:A="",,{A2:A, B2:D/QUERY(QUERY(A:F, 
 "select avg(B),avg(C),avg(D)
  where F is not null 
    and E='defense' 
  group by F", 0), "offset 1", 0)}))

更新:

=ARRAYFORMULA(IF(E2:E="defense", {A2:A, B2:D/
 IFNA(VLOOKUP(F2:F, QUERY(QUERY(A:F, 
 "select F,avg(B),avg(C),avg(D)
  where F is not null  
    and E='defense' 
  group by F", 0), "offset 1", 0), {2,3,4}, 0))}, ))

【讨论】:

  • 这行得通,除非我输入更多信息。我的想法是在 B:D 中有很多具有这些不同值的行。当多次使用相同的名称时,公式会出错,从而导致“不同的数组大小”进行除法。 pastebin.com/Q7ChpWcA这将是我要放入的第二张表,测试它是否有效
  • 你能分享一份你的工作表副本吗?
  • 我设置了这个示例表:docs.google.com/spreadsheets/d/… 您可以将第二个排行榜 (hfgk3og0) 复制粘贴到第一个下方,以查看公式中的错误。我通过不同公式的总和做了一个我想要的例子,但我希望能够把它浓缩成一个
  • @inatater 答案已更新 - docs.google.com/spreadsheets/d/…
  • 我觉得我应该为此付钱给你——你太棒了。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-14
  • 2017-05-10
相关资源
最近更新 更多