谷歌表格 - 按条件分组并计算值

3
在Google Sheets中,我正在尝试编写一个查询(不是独立的数据透视表或脚本),该查询根据if / then语句基于计算值进行分组。
以下是我的示例数据:
Name    Days
Bob     0
Ed      1
Frank   2
Joey    4
Deluth  7
Henry   12

按列B分组相对简单:

=QUERY(A1:B7,"SELECT B, COUNT(B) GROUP BY B")

输出结果如下:

Days    count
0       1
1       1
2       1
4       1
7       1
12      1

但我想做的是将这些天分成特定的组。这些组和所需的输出应该是如下所示的:

Days    count
0       1
1       1
2-5     2
6-9     1
10+     1

那么这就几乎是一个“如果为0则为'0',如果为1则为'1',如果>1且<=5则为'2-5'等”的情况,最后还需要进行分组(Group By)?这应该如何用QUERY格式编写?

2个回答

7
如果您在(比如)G2:G6单元格中输入了每个范围的上限,您可以使用频率函数来获取结果:
=frequency(B2:B,G2:G)

然后您可以将此与您的 bin 单元格组合,以将两列合并在一起:
=ArrayFormula({D2:D6,frequency(B2:B,G2:G)})

从您的单元格中提取上限有点棘手,但是您可以像这样将所有内容组合在一起而不需要使用辅助列:
=ArrayFormula({D2:D6,frequency(B2:B,--(right(D2:D5,len(D2:D5)-iferror(find("-",D2:D5),0))))})

enter image description here

请注意,除了用于显示目的外,您无需定义“10+”范围,频率会自动将所有剩余值(大于9)分组到单独的箱中。
如果您愿意,您可以使用一系列嵌套的if语句或(更好的)vlookup重新编码原始日值,并将结果传递给具有分组的查询。

1
太棒了,汤姆!我之前不知道频率的事情! - undefined
谢谢 - 是的,频率是一个令人惊讶地有用的函数,在Excel中用于计算唯一值的数量(在Google表格中不太常用,因为你可以使用Unique和CountUnique函数),同时也适用于重复的字符或数字序列。 - undefined

4

如果允许使用辅助列,那么您可以稍微改变一下现有的公式(为了排序需要稍微作弊),只需将A1更改为A2:

插入一个新的列B,在B2处复制并向下拖动以适应:

=lookup(C2,{0,1,2,6,9},{"00","01","02-5","06-9","10+"})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接