SELECT * FROM (SELECT t.*, NTILE(2) OVER(ORDER BY dbms_random.VALUE) tmpcol FROM t) WHERE tmpcol = 1
我这里是查询了其中一半的数据,但是不能通过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个组
SELECT提供了SAMPLE子句来从表中随机读取采样数据。SELECT ...table_name SAMPLE [BLOCK] (sample_percent)你可以随机读取块而不是行来采样记录,对于块采样,BLOCK关键词是必需的。可选的采样率必须小于100。 当使用SAMPLE子句,只能从单表中读取。连接查询不支持。select * from tbl SAMPLE(50);
to duanzilin(寻):表数据量较大,这样效率会不会慢,而且这两部分数据要用两个会话处理另,这两部分数据大致相等即可, 只要用一个sql语句取第一部分,另一个sql语句准确取得另一部分即可
当使用SAMPLE子句,只能从单表中读取。连接查询不支持。select * from tbl SAMPLE(50);
只要用一个sql语句取第一部分,另一个sql语句准确取得另一部分即可