能不能取表的任意一半数据和另一半数据,好希望能取

sillyli 2006-02-21 04:27:58
如何取,谢谢


...全文
136 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zlz_212 2006-02-22
  • 打赏
  • 举报
回复
关注
沝林 2006-02-22
  • 打赏
  • 举报
回复
如果是取任意一半取数据的话用2个sql不大现实,因为sql执行2次的结果都是随机的,而且是两个会话,用临时表也不可取,只有建一个中间表,第一次随机取得一半数据放入中间表,第2次用中间表和原表关联取另一半
sillyli 2006-02-21
  • 打赏
  • 举报
回复
to duanzilin(寻):表数据量较大,这样效率会不会慢,而且这两部分数据要用两个会话处理

另,这两部分数据大致相等即可,
只要用一个sql语句取第一部分,另一个sql语句准确取得另一部分即可
sillyli 2006-02-21
  • 打赏
  • 举报
回复
但是还想准确的取得另一半数据,有什么办法吗
我是想让前一半数据和后一半数据并行作某些操作
boydgmx 2006-02-21
  • 打赏
  • 举报
回复
SELECT提供了SAMPLE子句来从表中随机读取采样数据。

SELECT ...table_name SAMPLE [BLOCK] (sample_percent)

你可以随机读取块而不是行来采样记录,对于块采样,BLOCK关键词是必需的。可选的采样率必须小于100。
当使用SAMPLE子句,只能从单表中读取。连接查询不支持。

select * from tbl SAMPLE(50);
沝林 2006-02-21
  • 打赏
  • 举报
回复
我这里是查询了其中一半的数据,但是不能通过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个组
沝林 2006-02-21
  • 打赏
  • 举报
回复
SELECT * FROM (SELECT t.*, NTILE(2) OVER(ORDER BY dbms_random.VALUE) tmpcol FROM t) WHERE tmpcol = 1

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧