簡體   English   中英

Oracle SQL 隨機排序

[英]Oracle SQL Order By Random

在我的數據庫中,每個 ID 都有多個記錄。 在我的輸出中,我想按日期為每個 ID 對行進行排序,而 ID 最終會隨機顯示。

這是我的代碼,它有效但顯示排序的 ID,沒有隨機 ID:

SELECT ID,  VALUE, DATE
FROM TABLE
ORDER BY ID, DATE DESC;

我試着把它改成

SELECT ID,  VALUE, DATE
FROM TABLE
ORDER BY ID, dbms_random.value, DATE DESC;

但它不起作用並給了我這個錯誤:

ORA-01652: unable to extend temp segment by 64 in tablespace TEMP01

我的猜測是我沒有更多的磁盤可以分配給我的 TEMP 表空間,但是如何修改它? 此外,我不確定我是否正確使用了 dbms_random.value,是嗎?


為了進一步說明我最終顯示隨機 ID 的想法,請參見以下示例:

原文:

ID    VALUE    DATE
1     200     1/2/2013
1     300     3/26/2013
2     200     2/2/2013
3     100     2/3/2015
3     500     6/21/2014
3     200     5/3/2014

期望:

ID    VALUE    DATE
2     200     2/2/2013
3     200     5/3/2014
3     500     6/21/2014
3     100     2/3/2015
1     200     1/2/2013
1     300     3/26/2013

如果您想要隨機樣本,請使用sample子句或其他一些技術。 如果近似數字足夠,那么您可以通過執行以下操作獲得 1% 的樣本:

SELECT ID,  VALUE, DATE
FROM TABLE SAMPLE (1);

另一種方法是:

WITH t AS (
      SELECT t.*, dbms_random.value as rnd
      FROM TABLE t
     )
SELECT ID, VALUE, DATE
FROM t
WHERE rnd < 0.01

我不確定您想要什么類型的抽樣(嚴格隨機抽樣、分層抽樣、整群抽樣等)。 但是,不需要對所有 80,000,000 行進行排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM