2013-10-02 157 views
32

我想從表中獲取25個15,000個ID的隨機樣本。我不是每次都手動按下運行,而是試着做一個循環。我完全理解的並不是Postgres的最佳使用,但它是我擁有的工具。這是我到目前爲止有:Postgres for LOOP

for i in 1..25 LOOP 
    insert into playtime.meta_random_sample 
    select i, ID 
    from tbl 
    order by random() limit 15000 
end loop 

回答

76

Procedural elements like loops不是SQL語言的一部分,只能是程序語言函數體或DO語句,其中這樣的附加元素被定義內部使用相應的程序語言。默認值是PL/pgSQL,但是there are others

例與PLPGSQL:

DO 
$do$ 
BEGIN 
FOR i IN 1..25 LOOP 
    INSERT INTO playtime.meta_random_sample (col_i, col_id) -- use col names 
    SELECT i, id 
    FROM tbl 
    ORDER BY random() 
    LIMIT 15000; 
END LOOP; 
END 
$do$; 

如果您需要優化性能,考慮此相關的問題: