如何从表中检索(选择)一半记录,例如,包含1000行的表,从表中检索500(50%).(在这种情况下,我可以使用rownum,因为我们知道行的确切数量(1000) - select * from table where rownum <= 500),但我必须计算每个表来实现该语句.
你认为我能做到这一点的最佳方式是什么?
Dav*_*dge 10
好吧,你可以计算行数并选择一半:
select *
from my_table
where rownum <= (select count(*)/2 from my_table)
Run Code Online (Sandbox Code Playgroud)
这将倾向于选择在物理段内连续的行.
要么 ...
select *
from (select rownum rn, * from my_table)
where mod(rn,2) = 0
Run Code Online (Sandbox Code Playgroud)
这往往会选择"每隔一行",因此您可以从物理数据段中获得相当均匀的扩展.
要么 ...
select *
from my_table sample (50)
Run Code Online (Sandbox Code Playgroud)
那将是大约一半的行.
要么 ...
select *
from my_table sample block (50)
Run Code Online (Sandbox Code Playgroud)
这将是来自段的高水位线下方的大约一半数据块的行.
可能有很多不同的方式,你想要哪一种可能取决于你是否想要所选择的伪随机.
如果要使用查询的输出,请使用以下内容:
select ...
from (select *
from my_table
where rownum <= (select count(*)/2 from my_table)) my_table
join ...
Run Code Online (Sandbox Code Playgroud)
在那种情况下,SAMPLE语法会更紧凑.
| 归档时间: |
|
| 查看次数: |
13388 次 |
| 最近记录: |