解决方案 »

  1.   

    怎么个规则?随机取出来吗?
    SELECT * FROM(
    select T.*,row_number()over(PARTITION BY 班级 order by dbms_random.value) RN
    from T)
    WHERE RN<=DECODE(班级,'一年级',20,'二年级',30,'三年级',50)
      

  2.   

    简单的使用 union all 吧!
      

  3.   

    union all需要遍历3次全表,效率不是很好,不过就这数据量,随便写吧,一共才300条数据
      

  4.   

    union all需要遍历3次全表,效率不是很好,不过就这数据量,随便写吧,一共才300条数据
    额,我只是打个比方。我真实数据现在有30万条。到年底大概有200万条。
    感觉效率不是很高。我现在6万条数据,取20条数据用了 0.967秒
      

  5.   

    union all需要遍历3次全表,效率不是很好,不过就这数据量,随便写吧,一共才300条数据
    额,我只是打个比方。我真实数据现在有30万条。到年底大概有200万条。
    感觉效率不是很高。我现在6万条数据,取20条数据用了 0.967秒
    唉,不说清楚,300条和6万条的写法肯定不一样的,我记得有个hint的写法,按照百分比随机取数据的,具体是啥还真忘了,得去查查文档
      

  6.   

    union all需要遍历3次全表,效率不是很好,不过就这数据量,随便写吧,一共才300条数据
    我现在还有很多其它的条件。已经用方法封装好了。
    我年纪这个参数接收进来后 比如年纪这个字段是grade
    我是stringbuff  怎么把上面的语句 用in还是用哪个效率能快点
      

  7.   

    union all需要遍历3次全表,效率不是很好,不过就这数据量,随便写吧,一共才300条数据
    额,我只是打个比方。我真实数据现在有30万条。到年底大概有200万条。
    感觉效率不是很高。我现在6万条数据,取20条数据用了 0.967秒
    唉,不说清楚,300条和6万条的写法肯定不一样的,我记得有个hint的写法,按照百分比随机取数据的,具体是啥还真忘了,得去查查文档
    额 这个一开始 我就说打个比方了
      

  8.   

    union all需要遍历3次全表,效率不是很好,不过就这数据量,随便写吧,一共才300条数据
    额,我只是打个比方。我真实数据现在有30万条。到年底大概有200万条。
    感觉效率不是很高。我现在6万条数据,取20条数据用了 0.967秒
    我现在多条件查询 比如我想查 性别是男的,1年纪取 20个,2年纪取30个 分数80分以上的
      

  9.   

    查到了,还不是hint,呵呵,参考这个
    这种方法取出来的是大概的记录数,不是准确按照百分比获取的
    百分比需要设置的稍大一点,同时还需要配合我1#的方法才能最终取到指定数目的记录
    另外因为你的结果分为几个部分,而这种方法取出的数据在极端的情况下可能造成某一部分的记录数不足
    所以各部分语句必须分开写,再使用union all的方式合并
    因为已经有了,所以不再自己写。
    参考于:http://www.eygle.com/archives/2004/11/get_random_output_of_recordset.html
    但该文是基于8起的,有些恐怕有点过时,但总体OK。
    在一个记录集合中随机取一定比例的记录有两个方法:
    1)select * from tab sample(10) percent    ,按照10%比例获取记录
         缺点是每次的记录数并不是一样多,但可以用seed参数来控制下,效果还行。     
    2)  select * from (select * from tab order by dbms_random.value ) where rownum<?sample,有诸多限制。但比 order by dbms_random.value 效率好些,在某些场合还是不错的。
      

  10.   

    相比效率,其实更关心的是准确率。
    比如 我想查 性别是男的,分数 80分以上。1年纪的10个,2年纪的20个。
    我用stringbuff拼接SQl语句,比如性别 sex= 我实体类的get方法.
    在拼接分数 gender= 分数的get方法
    我年纪 class 拼接 我接收年纪的参数。
    这样怎么拼接呢
      

  11.   

    SELECT * FROM(
    select T.*,row_number()over(PARTITION BY 班级 order by dbms_random.value) RN
    from T
    where 分数>=80 and 性别='男')--拼接的条件在这行改就是了
    WHERE RN<=DECODE(班级,'一年级',10,'二年级',20)
      

  12.   

    update T
    SET 奖学金=500
    WHERE ROWID IN (
    SELECT RID FROM(
    select T.ROWID RID,T.*,row_number()over(PARTITION BY 班级 order by dbms_random.value) RN
    from T
    where 分数>=80 and 性别='男')--拼接的条件在这行改就是了
    WHERE RN<=DECODE(班级,'一年级',10,'二年级',20)
    )