我怎样才能找回(select)表中一半的记录,例如,有 1000 行的表,从表中检索 500 (50%) 条记录。 (在这种情况下,我可以使用 rownum 因为我们知道行的确切数量 (1000) -select * from table where rownum <= 500
),但我必须计算每个表才能实现该语句。
你认为我能做到这一点的最好方法是什么?
好吧,你可以计算行数并选择一半:
select *
from my_table
where rownum <= (select count(*)/2 from my_table)
那会tend选择物理段内连续的行。
Or ...
select *
from (select rownum rn, * from my_table)
where mod(rn,2) = 0
那会tend选择“每隔一行”,这样您就可以从物理数据段中获得相当均匀的分布。
Or ...
select *
from my_table sample (50)
这大约是行的一半。
Or ...
select *
from my_table sample block (50)
这将是来自段高水位线下方大约一半数据块的行。
可能有很多不同的方法可用,您想要哪一种可能取决于您是否想要伪随机选择。
如果您想使用查询的输出,请使用类似以下内容的内容:
select ...
from (select *
from my_table
where rownum <= (select count(*)/2 from my_table)) my_table
join ...
在这种情况下,SAMPLE 语法会更加紧凑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)