如何在Query分组时忽略D列末尾+字符并合并对应数据?
问题需求
现有Google Sheets数据,使用公式=query(A26:D64;"select B,max(C),D where A = TRUE group by B, D")进行分组统计,需调整逻辑:
- 若D列条目末尾带有
+字符,移除该+ - 将对应C列的数据合并到移除
+后的同组条目中(累加C列数值)
示例1
原始数据
| A | B | C | D |
|---|---|---|---|
| True | Category1 | 5 | Category1 |
| True | Category2 | 2 | Category2+ |
| True | Category2 | 3 | Category2 |
| True | Category2 | 6 | Category2 |
当前Query结果
| A | B | C | D |
|---|---|---|---|
| True | Category1 | 5 | Category1 |
| True | Category2 | 2 | Category2+ |
| True | Category2 | 6 | Category2 |
期望结果
| A | B | C | D |
|---|---|---|---|
| True | Category1 | 5 | Category1 |
| True | Category2 | 8 | Category2 |
示例2
原始数据
| A | B | C | D |
|---|---|---|---|
| True | Category1 | 5 | Category1 |
| True | Category2 | 2 | Category2+ |
期望结果
| A | B | C | D |
|---|---|---|---|
| True | Category1 | 5 | Category1 |
| True | Category2 | 2 | Category2 |
示例3
原始数据
| A | B | C | D |
|---|---|---|---|
| True | Category1 | 5 | Category1 |
| True | Category2 | 1 | Category2 |
| True | Category2 | 13 | Category2 |
| True | Category2 | 3 | Category2+ |
| True | Category2 | 4 | Category2+ |
期望结果
| A | B | C | D |
|---|---|---|---|
| True | Category1 | 5 | Category1 |
| True | Category2 | 20 | Category2 |
解决方法
通过先预处理D列移除末尾+,再按B列和处理后的D列分组累加C列数值,可使用以下公式:
=QUERY( {A26:A64, B26:B64, C26:C64, ARRAYFORMULA(IF(RIGHT(D26:D64,1)="+", LEFT(D26:D64, LEN(D26:D64)-1), D26:D64))}, "select Col1, Col2, sum(Col3), Col4 where Col1 = TRUE group by Col1, Col2, Col4 label Col1 'A', Col2 'B', sum(Col3) 'C', Col4 'D'", 1 )
公式说明
- 数组预处理:用
{}构造新数组,第四列通过ARRAYFORMULA批量判断并移除D列末尾的+ - 分组求和:基于新数组的A、B、处理后的D列分组,对C列求和
- 表头还原:
label参数将结果列标题还原为原始的A、B、C、D - 表头识别:最后一个参数
1表示原始数据包含表头
若无需保留A列,可简化公式为:
=QUERY( {B26:B64, C26:C64, ARRAYFORMULA(IF(RIGHT(D26:D64,1)="+", LEFT(D26:D64, LEN(D26:D64)-1), D26:D64))}, "select Col1, sum(Col2), Col3 group by Col1, Col3 label Col1 'B', sum(Col2) 'C', Col3 'D'", 1 )
内容的提问来源于stack exchange,提问作者nadirg
相关产品推荐
相关产品推荐

