如何在Google表格中生成列的排名?我使用ArrayFormula吗?

时间:2016-05-06 19:42:22

标签: sql google-sheets

以下以图片为例:

sheet

左侧是我目前拥有的原始数据,包括A,B,C,D,E,F组的列。每行代表1个游戏,并且播放了许多游戏(此电子表格有数千行) 。

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

在第一排,A队得分最高,因此排名第一; C队得分排在第二位,因此排在第二位,等等。

我无法确定如何按行排序,而不是按列排序,这是默认的sort()函数的作用。我尝试了多种方法,包括使用谷歌SQL查询功能(https://developers.google.com/chart/interactive/docs/querylanguage),但无法弄清楚如何使用它。

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

2 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:0)

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

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

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

公式说明:它创建一个两行数组(团队名称和分数),对其进行转置,使得分数成为第二列,按该列排序,再次转置,并仅保留名称(第一行)