暂无图片
除了使用excel规划求解外还有没有其他简单方法实现m个数据中找出n个数据,并且n个数据合计等于特定值
我来答
分享
zjfgx
2022-05-26
除了使用excel规划求解外还有没有其他简单方法实现m个数据中找出n个数据,并且n个数据合计等于特定值

除了使用excel规划求解外还有没有其他简单方法实现m个数据中找出n个数据,并且n个数据合计等于特定值(133.09)

1001C0100000002SWX6Y 21.98
1001C0100000002SWX6X 22.11
1001C0100000002SWX70 22.12
1001C0100000002SWX71 22.09
1001C0100000002SWX72 22.16
1001C0100000002SWX73 22.1
1001C0100000002SWX74 21.96
1001C0100000002SWX75 22.11
1001C0100000002SWX5O 22.21
1001C0100000002SWX5P 22.28
1001C0100000002SWX5Q 22.05
1001C0100000002SWX5R 22.22
1001C0100000002SWX5S 22.22
1001C0100000002SWX5T 22.11
1001C0100000002SWX5U 22.01
1001C0100000002SWX5V 21.91
1001C0100000002SWX5W 22.03
1001C0100000002SWX5X 22.23
1001C0100000002SWX5Y 22.25
1001C0100000002SWX5Z 22.05
1001C0100000002SWX60 21.94
1001C0100000002SWX61 22.03
1001C0100000002SWX62 21.89
1001C0100000002SWX63 22.01
1001C0100000002SWX64 22.07
1001C0100000002SWX65 22.05
1001C0100000002SWX66 21.78
1001C0100000002SWX67 22.02
1001C0100000002SWX68 21.91
1001C0100000002SWX69 22.1
1001C0100000002SWX6A 22.11
1001C0100000002SWX6B 22
1001C0100000002SWX6C 22.06
1001C0100000002SWX6D 22
1001C0100000002SWX6E 21.98
1001C0100000002SWX6F 22.06
1001C0100000002SWX6G 21.88
1001C0100000002SWX6H 22.04
1001C0100000002SWX6I 21.98
1001C0100000002SWX6J 21.94
1001C0100000002SWX6K 22.13
1001C0100000002SWX6L 22.07
1001C0100000002SWX6M 21.96
1001C0100000002SWX6N 22.22
1001C0100000002SWX6O 22.07
1001C0100000002SWX6P 22.02
1001C0100000002SWX6Q 22.09
1001C0100000002SWX6R 22.05
1001C0100000002SWX6S 22.02
1001C0100000002SWX6T 22.1
1001C0100000002SWX6U 22.02
1001C0100000002SWX6V 22.02
1001C0100000002SWX6W 22.02
1001C0100000002SWX6Z 22.12
我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
DarkAthena

简单方法是指的逻辑简单还是CPU计算步骤少?

原始数据不多且需要提取的数据不多的情况下,可以用笛卡尔积关联穷举任意组合,最后一个where条件过滤,其实和楼上的类似。
我刚刚自己试了下,你这个数据集里6个数之和等于133.09的有1623个组合

with t as (select row_number() over(order by id) rn, t.* from test_20220525 t) select * from t t1, t t2, t t3, t t4, t t5, t t6 where t2.rn > t1.rn and t3.rn > t2.rn and t4.rn > t3.rn and t5.rn > t4.rn and t6.rn > t5.rn and t1.value + t2.value + t3.value + t4.value + t5.value + t6.value = 133.09

但这种算法太暴力了,每增加一个n,计算量都会暴增。
建议你去了解一下动态规划的算法逻辑,然后再把这个逻辑用存储过程来实现

暂无图片 评论
暂无图片 有用 1
暂无图片
zjfgx
题主
2022-05-26
厉害,经验证,有用,需要对结果过滤一下,6个数不需要排列组合,只要6个id一样的算一组
刘晓华

说个思路,在oracle里用下面这个SQL可以求解m个数取n个数的组合(下面是从1 ,2,3,4里取2个数的组合),自己再写个function把组合的和求出来就可以了

select sys_connect_by_path(rn,'+') items
from (select rownum rn from dual connect by level < 4)
where level = 2
connect by rn < prior rn and level <= 2

暂无图片 评论
暂无图片 有用 1
zjfgx
题主
2022-05-26
刚开始只知道sys_connect_by_path的普通常规用法,多学了一招,谢谢!
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏