利用一條SQL從表中抽取一定資料

2021-08-03 12:58:41 字數 1354 閱讀 7792

利用一條sql語句從資料庫表 隨機獲取n條記錄,各資料庫的sql語句略有不同,如下:

1、mysql

select * from table order by rand() limit n

以上**效率不高,自己對1000條資料表隨機取10條的測試結果為耗時0.125s,有網友推薦改為以下**效率有大幅提高,耗時為0.005s,不過結果是隨機從某個位置開始取n條記錄,而不是隨機取n條記錄,略有差異。詳細說明見mysql使用rand隨機查詢記錄效率測試。

select * fromtablea 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 每頁記錄數...