Excel如何查找col2和为10且项数为3的col1所有求和组合
实现方案
这个需求逻辑非常明确,不需要复杂算法,核心是枚举所有3个元素的无重复组合,筛选出col2之和为10的组即可。针对你给的7行样例数据,总共只有35种3元素组合,计算量可以忽略。
方案1:数据库端SQL实现
如果数据存在数据库里,直接用3表自连接即可,通过col2的大小比较做去重,避免同一组合被重复统计(比如A+B+C和B+A+C视为同一组),代码如下:
SELECT t1.col1 col1_item1, t2.col1 col1_item2, t3.col1 col1_item3, t1.col1 + t2.col1 + t3.col1 col1_total FROM your_table t1 INNER JOIN your_table t2 ON t1.col2 < t2.col2 INNER JOIN your_table t3 ON t2.col2 < t3.col2 WHERE t1.col2 + t2.col2 + t3.col2 = 10;
针对你提供的样例数据,执行后返回2组符合要求的结果:
- 对应col2值为1、4、5,col1值为134、21、982,col1求和结果为1137
- 对应col2值为2、3、5,col1值为432、222、982,col1求和结果为1636
如果你的表存在col2值重复的行,把连接条件里的
col2比较换成表的唯一主键比较即可,避免漏算同col2值的不同行组合。
方案2:本地Python实现
如果是本地处理数据,直接用标准库的组合生成工具遍历即可,代码可直接运行:
from itertools import combinations # 替换成你的实际数据 raw_data = [(134,1), (432,2), (222,3), (21,4), (982,5), (1352,8), (111,9)] valid_groups = [] for group in combinations(raw_data, 3): col2_sum = sum(col2 for col1, col2 in group) if col2_sum == 10: col1_sum = sum(col1 for col1, col2 in group) valid_groups.append({ "col1_items": [col1 for col1, col2 in group], "col2_items": [col2 for col1, col2 in group], "col1_sum": col1_sum }) # 打印结果 for g in valid_groups: print(g)
补充说明
如果后续你的数据量涨到千行级别,这种枚举方案依然可用:C(1000,3)约1.6亿次计算,普通设备也能在几秒内出结果。如果数据量到万行以上,再考虑剪枝优化即可,当前场景下枚举是开发成本最低、最不容易出逻辑bug的方案。
内容的提问来源于stack exchange,提问作者Andrey Andrey
相关产品推荐
相关产品推荐

