有一张表T,其中有N条记录,每条记录两个值A和B,A是序号,B是整数值,现在从其中抽取n条记录(n<N),使得这n条记录的值的总和等于一个值M(一个定值),请帮助实现。

解决方案 »

  1.   

    N   n    M这些都是定值吗?
      

  2.   

    做是不想做了。给一个思路?也不知道你的序号是不是连号。我们先作为不连号来做。
    用dbms_random来取得一个随机号码。然后当成行数来取得。假如这一次的N,还用不到很大位数的话,可以用select round(DBMS_RANDOM.VALUE(1,N),0) from dual这样的方式。然后就是M的问题了。
    我们认为,可以存在这样的规则,
    只是随机N-1条,然后,用M减去之前的N-1的纪录的和,我们认为这个差是T,去数据库检索等于T的纪录就可以了。
    不能存在的话,可以重新来过。(或者退到N-2的纪录来过。不过,我觉得重新来过合理一些。)当然,抽取对象是用在行数上,还是表里面的序号,还是表里面的值。都是可以的。只是一个思路。当然全部抽取也可以得到M,就是几率很低。赫赫。