私はテーブル(t1
)を持っています。私はランダムにセットの割合を取得する方法を知っています。pl/sqlクエリでランダムに行を取得する
ランダムに選択した行の30%をt2
に挿入し、残りの70%をテーブルt3
に挿入します。
t1
でt2
を比較し、t3
に挿入テーブルt2
へと比べて30%を挿入する以外の任意の他の方法はありますか?テーブルが巨大なので、このメソッドは私にとっては良くありません。
ps。オラクル版 - 11g
私はテーブル(t1
)を持っています。私はランダムにセットの割合を取得する方法を知っています。pl/sqlクエリでランダムに行を取得する
ランダムに選択した行の30%をt2
に挿入し、残りの70%をテーブルt3
に挿入します。
t1
でt2
を比較し、t3
に挿入テーブルt2
へと比べて30%を挿入する以外の任意の他の方法はありますか?テーブルが巨大なので、このメソッドは私にとっては良くありません。
ps。オラクル版 - 11g
ora_hashを参照してください。 9のバケツでテーブルのPK(または同様の列の組み合わせ)を使用してハッシュを生成し、0-6を持つテーブルを1つのテーブルに入れ、7,8,9を持つテーブルを別のテーブルに入れます。
はすべて挿入しますか?ここで私は人事部の従業員テーブルを使っていましたので、私はランダムに注文し、その30%を取った。それらのものは1のインジケータを持っています。私はテーブル全体でユニオンを行い、0のインジケータを与えました。インジケータの最大値をとり、インサートをすべて行いました。指標が第1の表に1である場合、残りの70%は第2の表に入る。
INSERT ALL
WHEN (table_one_ind = 1) THEN
INTO table_one
(
employee_id,
first_name,
last_name,
email,
hire_date,
job_id
)
VALUES
(
employee_id,
first_name,
last_name,
email,
hire_date,
job_id
)
ELSE
INTO table_two
(
employee_id,
first_name,
last_name,
email,
hire_date,
job_id
)
VALUES
(
employee_id,
first_name,
last_name,
email,
hire_date,
job_id
)
SELECT MAX (table_one_ind) table_one_ind,
employee_id,
first_name,
last_name,
email,
hire_date,
job_id
FROM
(SELECT t.*,
1 AS table_one_ind
FROM
(SELECT * FROM employees ORDER BY dbms_random.value
) t
WHERE rownum <=
(SELECT ceil(COUNT(*)*.3) FROM employees
)
UNION ALL
SELECT t.*, 0 FROM employees t
)
GROUP BY employee_id,
first_name,
last_name,
email,
hire_date,
job_id
ニックピッキングには申し訳ありませんが、PL/SQLクエリなどはありません。 PL/SQLは手続き型言語です。あなたのクエリはたぶんSQLです。 btwというクエリを表示しても怪我をすることはありません。 – sstan
「巨大」の巨大さはどれくらいですか?行数(桁数)? – mathguy
約350万件 –