如何在Google Sheets中对唯一名称分组,实现含0则返回0否则求和?
分组计算解决方案
原始数据
| NAME | POINT A |
|---|---|
| JOHN | 98 |
| JOHN | 0 |
| HARRY | 115 |
| HARRY | 75 |
需求说明
按NAME列的唯一值分组,执行以下规则:
- 若分组内POINT A列存在0,该分组结果为0
- 若分组内POINT A列无0,对该分组的POINT A数值求和
期望结果
| NAME | POINT A |
|---|---|
| JOHN | 0 |
| HARRY | 190 |
实现方法
电子表格(Excel/Google Sheets)
分步公式
- 提取唯一姓名:在空白单元格输入
=UNIQUE(A2:A5)(假设数据在A2:B5区域),生成唯一NAME列表 - 计算对应结果:在结果列表旁的单元格输入公式,下拉填充:
=IF(COUNTIFS(A$2:A$5,D2,B$2:B$5,0)>0,0,SUMIF(A$2:A$5,D2,B$2:B$5))
(D2为唯一姓名所在单元格)
动态数组公式(一键生成结果)
- Excel:
=LET( names, UNIQUE(A2:A5), results, BYROW(names, LAMBDA(x, IF(COUNTIFS(A2:A5,x,B2:B5,0)>0,0,SUMIF(A2:A5,x,B2:B5)))), HSTACK(names, results) )
- Google Sheets:
=ARRAYFORMULA( HSTACK( UNIQUE(A2:A5), BYROW(UNIQUE(A2:A5), LAMBDA(name, IF(COUNTIFS(A2:A5, name, B2:B5, 0) > 0, 0, SUMIF(A2:A5, name, B2:B5)))) ) )
SQL实现
如果是数据库表,可通过以下SQL语句完成分组计算:
SELECT NAME, CASE WHEN SUM(CASE WHEN POINT_A = 0 THEN 1 ELSE 0 END) > 0 THEN 0 ELSE SUM(POINT_A) END AS POINT_A FROM your_table GROUP BY NAME;
内容的提问来源于stack exchange,提问作者Esat Kurtul
相关产品推荐
相关产品推荐

