利用一條sql語句從資料庫表 隨機獲取n條記錄,各資料庫的sql語句略有不同,如下:
1、mysql
select * from table order by rand() limit n
以上**效率不高,自己對1000條資料表隨機取10條的測試結果為耗時0.125s,有網友推薦改為以下**效率有大幅提高,耗時為0.005s,不過結果是隨機從某個位置開始取n條記錄,而不是隨機取n條記錄,略有差異。詳細說明見mysql使用rand隨機查詢記錄效率測試。
select * fromtable
a join (select round(rand() * ((select max(id) fromtable
)-(select min(id) fromtable
))+(select min(id) fromtable
)) as id) as b where a.id >= b.id order by a.id limit n;
2、sql server
select top n * from table order by newid()
newid()函式將建立乙個 uniqueidentifier 型別的唯一值。
3、access
select top n * from table order by rnd(id)
rnd(id) 其中的id是自動編號字段,可以利用其他任何數值來完成,比如用姓名字段(username)
select top n * from table order by rnd(len(username))
4、oracle
1)dbms_random包
select * from (select * from table order by dbms_random.value) where rownum < n;
注:dbms_random包需要手工安裝,位於$oracle_home/rdbms/admin/dbmsrand.sql
dbms_random.value(100,200)
可以產生100到200範圍的隨機數
2)按概率抽取:
select * from table sample(百分比);
例:select * from table sample(10);
取表table中記錄條數的10%條記錄
3)sys_guid
select * from (select * from table orderby sys_guid()) where rownum5、postgresql
select * from table order by random() limit n
《轉 >
從大檔案中隨機抽取一定資料
在建模的時候,時常需要構造訓練集和測試集,但當總資料比較大的時候,如何進行簡單抽樣也是乙個問題。假設有這樣乙個情況,乙份資料總共有1,000,000條,要從中抽取100,000條左右的資料。每條資料相對比較大,把所有資料一次放入記憶體不靠譜,那麼如何抽樣呢?最齪的方法就是抽取頭100,000或100...
SQL語句隨機抽取一條記錄
我們經常想在乙個資料表中隨機地選取出資料來,比如隨機生成考試試卷等。利用 sql server 的 newid 方法就可以很輕鬆地達到這個目的。newid 方法返回乙個 guid,如 ee95a489 b721 4e8a 8171 3ca8cb6ad9e4 在 select 表的時候,再增加一列為 ...
一條sql 語句搞定資料庫分頁
一條語句搞定資料庫分頁 select top 10 b.from select top 20 主鍵字段,排序字段 from 表名 order by 排序字段 desc a,表名 b where b.主鍵字段 a.主鍵字段 order by a.排序字段 10 每頁記錄數 20 當前頁 1 每頁記錄數...