sql >> データベース >  >> RDS >> Mysql

確率に基づいてランダムな値を選択する

    これは、rand()を使用して行うことができます 次に、累積合計を使用します。合計が100%になると仮定します:

    select t.*
    from (select t.*, (@cumep := @cumep + chance) as cumep
          from t cross join
               (select @cumep := 0, @r := rand()) params
         ) t
    where @r between cumep - chance and cumep
    limit 1;
    

    注:

    • rand() 変数を初期化するためにサブクエリで1回呼び出されます。 rand()への複数の呼び出し 望ましくありません。
    • 乱数が2つの値の境界に正確に一致する可能性はほとんどありません。 limit 1 任意に1を選択します。
    • これは、cumep > @rのときにサブクエリを停止することで、より効率的にすることができます。 。
    • 値は特定の順序である必要はありません。
    • これは、合計が1に等しくない可能性を処理するように変更できますが、それは別の質問になります。



    1. phpとmysqlでステートメントを実行できません

    2. AWSPostgresRDSテーブルをAWSS3にエクスポートする

    3. Oracle SQLのスキーマ内のすべてのテーブルを一覧表示するにはどうすればよいですか?

    4. 警告:Mac OS High Sierraでbrewを使用してmysqlをインストールしようとすると、インストール後の手順が正常に完了しませんでした