如何取,谢谢

解决方案 »

  1.   

    SELECT * FROM (SELECT t.*, NTILE(2) OVER(ORDER BY dbms_random.VALUE) tmpcol FROM t) WHERE tmpcol = 1
      

  2.   

    我这里是查询了其中一半的数据,但是不能通过2次查询取得另一半数据,因为2次查询数据都是随机排序的,不能保证后面一次查询是另一半。 要查另一半数据可以先执行查询:SELECT * FROM (SELECT t.*, NTILE(2) OVER(ORDER BY dbms_random.VALUE) tmpcol FROM t) ,把结果存在游标或dataset中,然后取tmpcol 为1的就是其中一半,tmpcol为2的是另外一半,分析函数NTILE(2)就是把数据均匀的分成2个组,如果是NTILE(3)就是分3个组
      

  3.   

    SELECT提供了SAMPLE子句来从表中随机读取采样数据。SELECT ...table_name SAMPLE [BLOCK] (sample_percent)你可以随机读取块而不是行来采样记录,对于块采样,BLOCK关键词是必需的。可选的采样率必须小于100。
    当使用SAMPLE子句,只能从单表中读取。连接查询不支持。select * from tbl SAMPLE(50);
      

  4.   

    to duanzilin(寻):表数据量较大,这样效率会不会慢,而且这两部分数据要用两个会话处理另,这两部分数据大致相等即可,
    只要用一个sql语句取第一部分,另一个sql语句准确取得另一部分即可
      

  5.   

    如果是取任意一半取数据的话用2个sql不大现实,因为sql执行2次的结果都是随机的,而且是两个会话,用临时表也不可取,只有建一个中间表,第一次随机取得一半数据放入中间表,第2次用中间表和原表关联取另一半