现在有如下的数据:
姓名 金额
A 1
B 2
C 3
D 4
E 5
F 6
G 7
H 8
I 9现在已经将数据按照"金额"进行了升序排列,
我期望能提取出总金额为:10 并且包含的人员人数最多的组合.
结果如下:
姓名 金额
A 1
B 2
C 3
D 4附加说明:
1.由于数据量非常的巨大.不能使用游标的方式来逐条的处理;
2.总金额10不是一个确定的数值.而是根据传入的参数确定的,所以事先无法预定;
3.选定的人数累计总金额可以不完全等于总金额10,可以存在一定范围内的误差;
4.希望用最少的SQL完成该工作;问题描述完结.
期待各位的答案中........
姓名 金额
A 1
B 2
C 3
D 4
E 5
F 6
G 7
H 8
I 9现在已经将数据按照"金额"进行了升序排列,
我期望能提取出总金额为:10 并且包含的人员人数最多的组合.
结果如下:
姓名 金额
A 1
B 2
C 3
D 4附加说明:
1.由于数据量非常的巨大.不能使用游标的方式来逐条的处理;
2.总金额10不是一个确定的数值.而是根据传入的参数确定的,所以事先无法预定;
3.选定的人数累计总金额可以不完全等于总金额10,可以存在一定范围内的误差;
4.希望用最少的SQL完成该工作;问题描述完结.
期待各位的答案中........
结果如下:如上的表述有点不明白
总金额为10是什么意思?某些人员的和还是金额那一列为10
1.由于数据量非常的巨大.不能使用游标的方式来逐条的处理;
至少单个用户的金额要小于10的用户群能用游标获得吧?
2.总金额10不是一个确定的数值.而是根据传入的参数确定的,所以事先无法预定;
这说明只能通过游标加条件获得用户
3.选定的人数累计总金额可以不完全等于总金额10,可以存在一定范围内的误差;
这说明至少四舍五入是10
回答:
下面就是写一个算法了:
因为已经排序所以,先取小于等于(10)/2一半(前一半)的用户金额求和:看是否否满足条件;
如果小或等于;加(后一半)的第一个用户的金额看是否还满足条件;持续加到不满足并累计用户数,就是最大组合用户数,
如果大于;减(前一半)的第一个用户看是否满足,持续减到满足并累计用户数;就是最大组合用户数。
抱歉代码就不写了,只要思路不错就能行的通。