问题是这样:  现在想实现的是从下边一堆数据中,随机抽取4个种类:A,B,C,D  让最后val的总值为960
数据表A中有两列 
type, val
D 11
C 9
D 30
D 20
C 21
C 14
B 17
A 16
B 9
B 19
D 13
A 8
B 9
B 30
A 12
A 6
B 30
B 13
C 14
B 16
B 5
C 30
B 30
D 15
B 30
B 30
B 9
B 13
D 57
D 15
D 23
B 10
D 13
B 17
B 15
A 15
C 16
D 13
D 19
B 5
C 8
B 17
A 6
B 5
D 12
B 17
C 11
B 17
A 24
B 11
B 19
A 9
D 15
C 28
D 32
D 10
C 15
A 12
D 19
B 30
B 16
D 13
B 11
D 30

解决方案 »

  1.   

    随机抽取4个种类:A,B,C,D  让最后val的总值为960——没看懂,A,B,C,D4个种类,每一个种类至少一个,总的数量不定,但总合是960?
      

  2.   


    意思就是4个种类,随机抽,不论怎么抽,最后总和得960.有可能A,B,C,D其中有一个或两个为空
      

  3.   

    不理解~~
    最后的结果是什么? 
    A、B、C、D,或者是它们的任意组合? 但是要求结果是960?
    按照A、B、C、D分别汇总
    select type, sum(val) from table A group by type;
    然后,看每个类型的值如何组合成960?
      

  4.   

    你这个题目,条件太少了,要求条件也太少了:with s
    as
    (
    --     类别   该类别值【抽1次】汇总   该类别值【抽2次】汇总      该类别值【抽3次】汇总 
    select type, sum(distinct val) as s1, sum(distinct val) * 2 as s2, sum(distinct val) * 3 as s3
    from   t
    group  by type
    order  by type
    )
    ---   所有的类别相加 【抽1次】【抽3次】【抽3次】
    select 'SUMV' as type,sum(s1), sum(s2),sum(s3)
    from s
    union all
    select * 
    from s
    order by 1
      

  5.   

    这是算法问题,不是ORACLE能够轻易解决的
      

  6.   


    也就是说,你那个960,必须得允许某个类别抽  2次+ 才行。
    如果是那样,你这个其实不适合用sql实现,自己写个程序,从val池子中选择,保证存在 {2、3、4}种类型的值,抽多少次不管(当然你也可以限制最多次数,比方5次)得到960!
      

  7.   


    也就是说,你那个960,必须得允许某个类别抽  2次+ 才行。
    如果是那样,你这个其实不适合用sql实现,自己写个程序,从val池子中选择,保证存在 {2、3、4}种类型的值,抽多少次不管(当然你也可以限制最多次数,比方5次)得到960!这个题目是细思极恐类的,类似于智能推导,像下象棋!!!