隨機讀取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
SelectTOP
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
rownum<N;
5、postgreSQL
select *
from
Table
order
by
random() limit N
相關推薦
隨機讀取N條記錄(MySQL、SQL Server、Access、Oracle、postgreSQL)
利用一條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逆向工程配置(MySQL和SQL 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