PostgreSQL-隨機查詢N條記錄


PostgreSQL-隨機查詢N條記錄

前言

  利用一條SQL語句從數據庫Table表中隨機獲取N條記錄,各數據庫的SQL語句略有不同,如下:

目錄

 1. MySql

 2. SQL Server

 3. Access

 4. Oracle

 5. postgreSQL

1、MySql

	Select * From TABLE Order By Rand() Limit N

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

SELECT * FROM TABLE a join (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM TABLE)-(SELECT MIN(id)FROM TABLE))+(SELECT MIN(id) FROM TABLE)) 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 order by sys_guid()) where rownum<N;

5、postgreSQL

	select * from Table order by random() limit N

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM