【问题标题】:Need to return a max value from multiple columns in a single row in a Google Sheets query需要在 Google 表格查询的单行中从多列返回最大值
【发布时间】:2020-01-03 23:40:13
【问题描述】:

我的 Google 表格数据如下所示:

12/01/2019   Tom    blah   23    24   25   blah   blah  blah 
12/01/2019   Mary   blah   34    -2   44   blah   blah  blah
12/01/2019   Paul   blah   23     2        blah   blah  blah
11/23/2019   Tom    blah  -23   -33   -2   blah   blah  blah

轻松创建基于名称获取所有结果的查询。但我需要的是返回所有额外数据的东西,但只返回 3 个数字的 MAX 值(如果最大数字为负数,则返回零) - 基本上类似于“选择 A、B、C、MAX( D、E、F)"。所以它会返回:

12/01/2019   Tom   blah   25  blah  blah  blah
11/23/2019   Tom   blah   0   blah  blah  blah

【问题讨论】:

  • 你的意思是按名称排序,还是按名称过滤?
  • 可以使用过滤、排序和if
  • 过滤,排序,如果?我可以得到我需要的行“选择*其中B包含'Tom'”(这将返回两行)。但我希望它只返回一列,其中 3 列 (D/E/F) 的最大值为最大值 - 希望这是有道理的。
  • 我想我应该说——我希望它返回行中的所有数据,除了这三列(只返回最大值),
  • 见我的回答

标签: google-sheets filter max array-formulas google-sheets-query


【解决方案1】:

这里是我说的示例,数据在 m66:u69 范围内,根据您的数据范围调整:

=array_constrain(sort(filter( {M66:O69,if(P66:P69>Q66:Q69,if(P66:P69>R66:R69,P66:P69,R66:R69),if(Q66:Q69>R66:R69,Q66:Q69,R66:R69)), S66:U69},N66:N69="Tom"),4,false),1,1000)

这里是另一个公式,其中没有 array_constrain 和排序,但会根据需要为您提供结果,2 行和三列的最大值,如果为负为 0:

=filter( {M66:O69,if(P66:P69>Q66:Q69,if(P66:P69>R66:R69,P66:P69*((SIGN(P66:P69)+1)/2),R66:R69*((SIGN(R66:R69)+1)/2)),
         if(Q66:Q69>R66:R69,Q66:Q69*((SIGN(Q66:Q69)+1)/2),R66:R69*((SIGN(R66:R69)+1)/2))), S66:U69},N66:N69="Tom")

说明: 1. {"a";"b"...} 将给出行中的数组

  1. {"a","b"...} 将在列中给出数组

  2. {"a";"b","c","d"} 这结合了行和列

  3. if(exp1,if(exp2,..,..),if(exp3,..,..)) 这些是级联的 if 从多个数据中获取一个数据

    李>
  4. (SIGN(P66:P69)+1)/2 将 0 表示为负数,将 1 表示为正数

  5. (P66:P69)*((SIGN(P66:P69)+1)/2) 将给出 0 表示负数,原样表示正数

【讨论】:

  • 我有点困惑,为什么它不返回两行 - 一个用于 11/23,一个用于 12/01?对不起,我在这方面还是比较新的......
  • 我将添加有关公式的说明
  • 哇,这太疯狂了。 :) 非常感谢你的帮助!看来我需要一个月的时间才能弄清楚它在做什么。
【解决方案2】:

创建每行的最大值:

=ARRAYFORMULA(QUERY(TRANSPOSE(QUERY(TRANSPOSE(IF(D2:F<0, 0, D2:F)), 
 "select "&TEXTJOIN(",", 1, IF(LEN(A2:A),
 "max(Col"&ROW(A2:A)-ROW(A2)+1&")", )))), 
 "select Col2"))


然后:

=ARRAYFORMULA(QUERY(TO_TEXT({FILTER(A2:C, A2:A<>""), 
 QUERY(TRANSPOSE(QUERY(TRANSPOSE(IF(D2:F<0, 0, D2:F)), 
 "select "&TEXTJOIN(",", 1, IF(LEN(A2:A),
 "max(Col"&ROW(A2:A)-ROW(A2)+1&")", )))), 
 "select Col2"), FILTER(G2:I, A2:A<>"")}), 
 "where Col2 = 'Tom'", 0))

【讨论】:

    猜你喜欢
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    相关资源
    最近更新 更多