首頁 > 電腦教學 > 電腦知識 > 如何隨機選擇一筆記錄從一個表格中

如何隨機選擇一筆記錄從一個表格中

WBOY
發布: 2024-01-15 14:18:16
轉載
1313 人瀏覽過

如何隨機選擇一筆記錄從一個表格中

怎麼從一個表格中隨機取一條資料

oracle隨機讀取表中的N條資料方法:

1) select * from (select * from tablename order by sys_guid()) where rownum 2) select * from (select * from tablename order by dbms_random.value) where rownum3) select * from (select * from table_name sample( 10) order by trunc(dbms_random.value(0, 1000))) where rownum 說明:

sample(10)意義為檢索表中的10%數據,sample值應該在[0.000001,99.999999]之間,其中 sys_guid() 和 dbms_random.value都是內部函數

註:

在使用sys_guid()方法時,有時會取得相同的記錄,也就是和前一次查詢的結果集是一樣的。這種情況可能與作業系統有關,例如Windows系統下正常,在Linux系統下異常。另外,sys_guid()函數本身可能有問題,需要進一步研究。

為確保在不同平台讀取的資料都是隨機的,建議採用2)和3)兩種方案。其中2)方案較常用,3)方案則適用於查詢大表且提取資料不多的情況下,能提高查詢速度。

如何隨機抽出一個大數據集中的部分紀錄

oracle隨機讀取表中的N條資料方法:

1

2

3

1) select * from (select * from tablename order by sys_guid()) where rownum 2) select * from (select * from tablename order by dbms_random.value) where rownum3) select * from (select * from table_name sample( 10) order by trunc(dbms_random.value(0, 1000))) 其中 rownum

說明:

sample(10)意義為檢索表中的10%數據,sample值應該在[0.000001,99.999999]之間,其中 sys_guid() 和 dbms_random.value都是內部函數

註:

在使用sys_guid()方法時,有時會取得相同的記錄,也就是和前一次查詢的結果集是一樣的。這種情況可能與作業系統有關,例如Windows系統下正常,在Linux系統下異常。另外,sys_guid()函數本身可能有問題,需要進一步研究。

為確保在不同平台讀取的資料都是隨機的,建議採用2)和3)兩種方案。其中2)方案較常用,3)方案則適用於查詢大表且提取資料不多的情況下,能提高查詢速度。

在oracle中如何從一張表中查詢一筆隨機記錄

這幾天工作上的需要,要從一個比較大的表中隨機取出一條記錄,oracle 不像MS SQLSERVER那樣,直接用Select TOP 1 * From TABLE Order By NewID(),就能高效的隨機查出一筆記錄。經過一翻折騰,用一個有90萬筆記錄的表t_id,只有一個gameid字段,該字段上沒有索引,表裡就是從100000到999999一連串的數據記錄,進行測試:

方法1.

採用rownum和dbms_random.value,平均用時5秒,這個效率確實是太低了,對於小表應該還行,大表那就太不適合了。

declare

n_id number(6);

begin

SELECT gameid into n_id FROM(SELECT gameid FROM t_id T ORDER BY dbms_random.value()) WHERE ROWNUM=1;

dbms_output.put_line(to_char(n_id));

end;

/

方法2.

採用oracle sample語法,設定隨機樣本是1%,結果用時0.01左右,速度是相當快的,但是根據官網的說法,採用sample採集特性可能會產生不准確的結果集,我在測試中是沒有碰到不正確的結果。但有個問題,就是隨機的結果分佈很不平均,結果幾乎都分內存卡在100000-200000的記錄中。效率雖好,但並沒有達到很好的隨機效果,如果對於結果的要不是很高的,這個方法是相當不錯的。

declare

n_id number(6);

begin

SELECT gameid into n_id FROM t_id SAMPLE (1) WHERE ROWNUM = 1;

dbms_output.put_line(to_char(n_id));

end;

/

方法3.

採用minus語法,先隨機取得一個在表總記錄數範圍內的一個隨機數,再透過rownum查詢兩個結果集只相差一條記錄,用minus相減留出事先隨機數的那筆記錄,平均用時大概1秒,隨機數越小,查詢速度越快,隨機數是20000時,用於0.016秒。該方法雖然

能得到很有隨機效果,但效率比較不上該方法2. 對效率要一般的話, 還是可以考慮使用的。

declare

n_count int:=0;

n_rand_num int:=0;

n_id number(6);

begin

SELECT COUNT(*) INTO n_count FROM t_id;

SELECT trunc(dbms_random.value(1,n_count 1)) INTO n_rand_num FROM DUAL;

select gameid into n_id from (SELECT gameid FROM t_id T WHERE rownum

minus

SELECT gameid FROM t_id T WHERE rownum

dbms_output.put_line(to_char(n_id));

end;

/

以上是如何隨機選擇一筆記錄從一個表格中的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:docexcel.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板