现在有如下的数据:
姓名  金额
 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完成该工作;问题描述完结.
期待各位的答案中........

解决方案 »

  1.   

    汗........都放这么久了..咋都没人帮回复一个啊...郁闷并期待中......
      

  2.   

    我期望能提取出总金额为:10 并且包含的人员人数最多的组合.
    结果如下:如上的表述有点不明白
      

  3.   

    还是没明白你的描述
    总金额为10是什么意思?某些人员的和还是金额那一列为10
      

  4.   

    我的理解:
    1.由于数据量非常的巨大.不能使用游标的方式来逐条的处理;
    至少单个用户的金额要小于10的用户群能用游标获得吧?
    2.总金额10不是一个确定的数值.而是根据传入的参数确定的,所以事先无法预定;
    这说明只能通过游标加条件获得用户
    3.选定的人数累计总金额可以不完全等于总金额10,可以存在一定范围内的误差;
    这说明至少四舍五入是10
    回答:
    下面就是写一个算法了:
    因为已经排序所以,先取小于等于(10)/2一半(前一半)的用户金额求和:看是否否满足条件;
    如果小或等于;加(后一半)的第一个用户的金额看是否还满足条件;持续加到不满足并累计用户数,就是最大组合用户数,
    如果大于;减(前一半)的第一个用户看是否满足,持续减到满足并累计用户数;就是最大组合用户数。
    抱歉代码就不写了,只要思路不错就能行的通。