在Oracle數據庫中,可以使用DBMS_RANDOM包和SAMPLE子句進行數據抽樣
方法1:使用DBMS_RANDOM包
CREATE GLOBAL TEMPORARY TABLE temp_random (random_number NUMBER) ON COMMIT PRESERVE ROWS;
DECLARE
v_count NUMBER := 1000;
BEGIN
FOR i IN 1..v_count LOOP
INSERT INTO temp_random VALUES (DBMS_RANDOM.VALUE);
END LOOP;
COMMIT;
END;
/
SELECT * FROM (
SELECT e.*, ROW_NUMBER() OVER (ORDER BY r.random_number) AS row_num
FROM employees e, temp_random r
)
WHERE row_num <= 10;
方法2:使用SAMPLE子句
使用SAMPLE子句可以直接對表進行抽樣,無需創建臨時表和生成隨機數。例如,從employees表中抽取10%的記錄:
SELECT * FROM employees SAMPLE (10);
注意:使用SAMPLE子句進行抽樣時,抽樣比例是基于表的大小和統計信息來確定的,因此可能不會得到精確的抽樣比例。如果需要更精確的抽樣結果,建議使用DBMS_RANDOM包進行抽樣。