編集:何か違いがあれば、私は5.7.19を使用しています。サブクエリとrand()を使用したランダムサンプリングで予期しない結果が発生する
私はテーブルAを持っており、ランダムに平均10%の行をサンプリングしようとしています。私は、サブクエリでrand()を使用し、そのランダムな結果をフィルタリングすることがトリックを行うと判断しましたが、予期しない結果が生じています。フィルタリングした後にランダムに生成された値を出力すると、メインクエリの「where」句と一致しないランダムな値が得られます。そのため、外側の選択肢のランダム値を再生成しているとします。
私はサブクエリと何かが実行されていないと思うが、何が起こっているのかは分かりません。
誰かが私が間違っていると説明することはできますか?私はこの投稿をチェックアウトしました:In which sequence are queries and sub-queries executed by the SQL engine?、私のサブクエリが最初に実行されていると仮定して私のサブクエリが相関するので、メインクエリはそれをフィルタリングしています。私の前提を考えると、なぜ結果には除外すべき値があるのか分かりません。
問合せ:
select
*
from
(
select
*,
rand() as rand_value
from
A
) a_rand
where
rand_value < 0.1;
結果:
--------------------------------------
| id | events | rand_value |
--------------------------------------
| c | 1 | 0.5512495763145849 | <- not what I expected
--------------------------------------
奇妙で再現性が、それが機能しているように、それは思えません。私は各クエリのテーブルの結果の約10%しか得ていませんが、なぜrand_valueカラムに0.1より大きい値が表示されているのかわかりません。 SELECT *、rand_valueとしてのrand()のサブクエリには関係なく、rand_value <0.1のFROMテーブルは同じ結果を返します。 – Devon
クエリに相関サブクエリが含まれておらず、単純な「導出テーブル」 –
ps:https://en.wikipedia.org/wiki/Correlated_subquery –