Google Sheets数组公式需求:计算同名数据加权总分并自动扩展
Google Sheets 自动计算加权得分的数组公式方案
需求回顾
对同名数据先计算平均分,再按以下规则加权:
- Dance 得分 ×3
- Jump 得分 ×2
公式需支持自动纳入新增数据行,最终输出每个姓名的:记录数、加权Dance得分、加权Jump得分
方案1:灵活扩展的动态数组公式(推荐)
假设原数据位于A:C列(A=姓名,B=原始Dance得分,C=原始Jump得分),在结果区域的首行下方输入以下公式,它会自动溢出所有结果并适配新增行:
=LET( names, A2:INDEX(A:A, COUNTA(A:A)), dance_raw, B2:INDEX(B:B, COUNTA(A:A)), jump_raw, C2:INDEX(C:C, COUNTA(A:A)), unique_names, UNIQUE(names), BYROW(unique_names, LAMBDA(name, LET( filtered_dance, FILTER(dance_raw, names=name), filtered_jump, FILTER(jump_raw, names=name), record_count, COUNTA(filtered_dance), avg_dance, AVERAGE(filtered_dance), avg_jump, AVERAGE(filtered_jump), weighted_dance, avg_dance*3, weighted_jump, avg_jump*2, HSTACK(name, record_count, weighted_dance, weighted_jump) ) )) )
公式说明
A2:INDEX(A:A, COUNTA(A:A)):自动抓取从第2行到最后一个非空行的数据,新增行时无需手动调整区域UNIQUE(names):提取所有不重复的姓名BYROW+LAMBDA:对每个姓名单独执行「过滤数据→统计数量→求平均→加权」的完整流程HSTACK:将计算结果组合为一行,自动溢出到右侧列
方案2:简洁的QUERY函数方案
如果需求简单,也可以用QUERY快速实现,自带表头处理:
=QUERY(A:C, "SELECT A, COUNT(A), AVG(B)*3, AVG(C)*2 WHERE A IS NOT NULL GROUP BY A LABEL COUNT(A)'记录数', AVG(B)*3'加权Dance得分', AVG(C)*2'加权Jump得分'", 1)
公式说明
GROUP BY A:按姓名分组计算AVG(B)*3:直接对分组后的Dance得分求平均并乘以权重WHERE A IS NOT NULL:自动忽略空行,新增有效数据行时会自动纳入计算- 最后的
1表示原数据第1行是表头,QUERY会自动替换为指定的新表头
验证示例
以Ali的数据为例:
- 原始Dance得分:4、6 → 平均分5 → 加权后5×3=15
- 原始Jump得分:8、8 → 平均分8 → 加权后8×2=16
- 记录数:2
两个公式都会输出符合要求的结果。
内容的提问来源于stack exchange,提问作者Edmund Ong
相关产品推荐
相关产品推荐

