【问题标题】:How do I generate a ranking of columns in Google Sheets? Do I use ArrayFormula?如何在 Google 表格中生成列排名?我使用 ArrayFormula 吗?
【发布时间】:2016-05-06 19:42:22
【问题描述】:

以图片为例:

左侧是我目前拥有的原始数据,由 A、B、C、D、E、F 队的列组成。每行代表 1 场比赛,并且进行了很多场比赛(这个电子表格有几千行) .

如何生成团队排名,就像我在右侧手动执行的操作一样?我想按他们拥有的点数对团队进行排序。

第一排,A队得分最高,因此排名第一; C队得分第二多,因此在第二列,依此类推。

我无法弄清楚如何按每行中的列排序,而不是按列排序,这是默认的 sort() 函数所做的。我尝试了多种方法,包括使用 google SQL 查询函数 (https://developers.google.com/chart/interactive/docs/querylanguage),但也不知道如何使用它。

在这种情况下使用 ArrayFormula() 是个好主意吗?我将如何实施?这张表确实有几千行,所以如果我可以在第一行放一个 ArrayFormula() 会好得多,而不是手动自动填充每一行。

【问题讨论】:

    标签: sql google-sheets


    【解决方案1】:

    对于单元格 H2,您可以使用 costum 公式:

    =ArraySort(A1:F1,A2:F2001)
    

    这是要粘贴到脚本编辑器中的代码:

    function ArraySort(Arr1, Arr2) {
    
      var w = Arr1[0].length;  
      var column = [];
      var row = []; 
      var result = [];
    
      for (var i = 0; i < Arr2.length; i++) {      
          row = [];      
          for (var k = 0; k < w; k++) {        
            column[k] = [Arr2[i][k],Arr1[0][k]];
          }       
          column.sort(sortFunction);
          for (var j = 0; j < w; j++) {        
            row[j] = column[j][1];
          }      
          result.push(row);
      }
    
    return result;
    
    }
    
    
    function sortFunction(a, b) {
        if (a[0] === b[0]) {
            return 0;
        }
        else {
            return (a[0] > b[0]) ? -1 : 1;
        }
    }
    

    【讨论】:

      【解决方案2】:

      以下公式在第二行创建排名:

      =array_constrain(transpose(sort(transpose({A$1:F$1; A2:F2}), 2, False)), 1, 6)
      

      可以将其复制下来以对其余行进行排名。我认为没有一种 arrayformula 方法可以对数组进行排序。

      公式说明:它创建一个两行数组(球队名称和分数),将其转置,使分数成为第二列,按该列排序,再次转置,只保留名称(第一行) .

      【讨论】:

        猜你喜欢
        • 2020-05-06
        • 1970-01-01
        • 1970-01-01
        • 2018-05-14
        • 2015-11-29
        • 1970-01-01
        • 2022-09-24
        • 2021-02-27
        • 2021-08-19
        相关资源
        最近更新 更多