1. 程式人生 > >隨機讀取N條記錄(MySQL、SQL Server、Access、Oracle、postgreSQL)

隨機讀取N條記錄(MySQL、SQL Server、Access、Oracle、postgreSQL)

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

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* fromTableorderby   sys_guid()) whererownum<N;

5、postgreSQL

select * from Table order by random() limit N

相關推薦

隨機讀取N記錄MySQLSQL ServerAccessOraclepostgreSQL

利用一條SQL語句從資料庫Table表中隨機獲取N條記錄,各資料庫的SQL語句略有不同,如下: 1、MySql Select * From TABLE Order By Rand() Limit N 以上程式碼效率不高,自己對1000條資料表隨機取10條的測試結果為耗時0

Mysql獲取每組前N記錄開窗函式

由於專案需求,我需要把查詢出來的資料進行分組,並且只需要每組前三條記錄,後來瞭解到MySQL實現開窗函式的方法,用了之後發現是可以,但今天發現這個方法在Navicat Premium軟體中執行第一次所查詢出來的資料不符合,執行第二次才是符合要求,具體原因有空再瞭

從資料庫表中隨機獲取N記錄SQL語句

Oracle:        select * from (select * from tableName order by dbms_random.value) where rownum < N; M

前端之路:sql語句,表中隨機獲取一記錄資料或者獲取隨機獲取多記錄資料

<!--表中獲取隨機一條title 耗時0.01s id==隨機欄位,最好為表id--> SELECT * FROM `tableName` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `ta

獲取分組後取某欄位最大一記錄求每個類別中最大的值的列表

獲取分組後取某欄位最大一條記錄 方法一:(效率最高) select a.* from test a, (select type,max(typeindex) typeindex from test group by type) b where a.

mybatis逆向工程配置MySQLSQL server

MySQL 只需配置generatorConfig.xml配置檔案即可 <?xml version="1.0" encoding="UTF-8"?> <!DOCTY

Mysql分組統計排序取前N記錄解決方案

今日根據專案需求,需要在mysql中解決記錄的分組統計、排序,並抽取前10條記錄的功能。現已解決,解決方案如下: 1)表結構 <span style="font-size:18px;">CREATE TABLE `policy_keywords_rel` (

mysql使用GROUP BY分組實現取前N記錄的方法

cls class ges rom 當前 分組 實現 一個 images MySQL中GROUP BY分組取前N條記錄實現 mysql分組,取記錄 GROUP BY之後如何取每組的前兩位下面我來講述mysql中GROUP BY分組取前N條記錄實現方法。 這是測試表(也

mysql分組查詢n記錄

sta 最大的 查詢 需求 dmi 依據 count 狀態 重點 當業務邏輯越來越復雜時,這個查詢的需求會越來越多,今天寫成筆記記錄下來,防止再忘記 SELECT * FROM `notice` a where add_time > 1513008000 and a

mysql隨機獲取n資料

做秒殺時,碰到從秒殺商品中隨機取商品圖的問題,可以用order by rand() limit *隨機取出*條記錄; 例如: select gs.original_img from ecs_goods as gs where goods_id in( select goods_id

mysql怎樣高效率隨機獲取n資料

ID連續的情況下(注意不能帶where,否則結果不好): SELECT * FROM `mm_account` AS t1 JOIN ( SELECT ROUND( RAND() * ( SELECT MAX(id) FROM `mm_acco

使用JDBC一次插入多記錄MySQL為例

閱讀本文需要的先修知識: 最基本的SQL語句 最基本的JDBC操作(如插入單條記錄) 如急需使用請直接看最後一段程式碼。 在JDBC中,插入記錄最簡單的方法是使用executeUpdate()方法,但該方法中的引數只能是單條SQL語句,其實對於需要INSERT或者UPDA

Mysql根據指定指定字元拆分某個欄位,分割成多記錄去重複

1.如圖 2.sql SELECT DISTINCT substring_index( substring_index( a.device_id, ',', b.help_topic_id + 1 ), ',',- 1 ) NAME FROM tb_tabrec

[SQL]取每個使用者最近一記錄分組取Top n

一直沒有時間寫分享,終於等到雙十一,任何需求都不準上,這才抽出時間整理一下蒐集了好幾天的SQL。 需求:查出使用者最近一條登入記錄。(110w條) 前提:預設時間和id都是遞增。(求時間最大->求id最大) 第一種:select * from user_log

MySQL語句:獲取最後一記錄ID數值最大的 - - Java EE

使用升序排序,將ID數值最大的放到最頂部。並顯示出來。 order by % desc 表示按降序排序 在sql語句的最後加上 limit 0,1 只取第一條記錄 select * from 表名 order by 表中ID欄位名稱 desc limit 0,1;

mysql學生成績排名,分組取前 N 記錄

score表: CREATE TABLE `score` ( `student_id` int(10) DEFAULT NULL, `class_id` int(10) DEFAULT NULL, `score` int(5) DEFAULT

MySQL取每組的前N記錄

  MySQL 分組後取每組前N條資料 與oracle的 rownumber() over(partition by xxx  order by xxx )語句類似,即:對錶分組後排序 CREATE TABLE `mygoods` ( `goods

mysql查詢某屬性下所有值的前N記錄

例如, 姓名 科目 成績 王 數學 100 王 語文 99 王 英語 98 王 生物 97 王 政治 96 王 物理 95 王 化學 94 王 體育 93

Mysql和Oracl 分組取每組前N記錄

MySQL取每組的前N條記錄:使用自連線的方式一、對分組的記錄取前N條記錄:例子:取前 2條最大(小)的記錄1234567891011121314151617181.用子查詢:SELECT * FROM right2 a  WHERE 2>(SELECT COUNT(*

mysql insert一記錄事務提交之前怎樣返回建立記錄的主鍵id,last_insert_id(),selectkey && 標籤屬性

mysql插入資料後返回自增ID的方法   mysql和oracle插入的時候有一個很大的區別是,oracle支援序列做id,mysql本身有一個列可以做自增長欄位,mysql在插入一條資料後,如何能獲得到這個自增id的值呢?   方法一:是使用last_insert_id mysql> SELE