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

重みを考慮してランダムに1つの行を選択するにはどうすればよいですか?

    最も簡単なのは、実際には加重リザーバーサンプリングを使用することだと思います:

    SELECT
      id,
      -LOG(RAND()) / weight AS priority
    FROM
      your_table
    ORDER BY priority
    LIMIT 1;
    

    これは、各要素に対して選択される確率がその重みに比例するN個の要素からM個を選択できる優れた方法です。要素が1つだけ必要な場合にも同様に機能します。この方法については、この記事 。 POW(RAND()、1 / weight)の最大値を選択することに注意してください。これは、-LOG(RAND())/weightの最小値を選択するのと同じです。



    1. PostgreSQL11の新しいパーティショニング機能を利用する方法

    2. MySQLとPHPで単一行クエリを使用する

    3. MySQL:列のテキストの長さを取得する方法

    4. MySql:MyISAMとInno DB!