上記のSQLステートメントを考えると、あなたが持っている数値は、各行が選択される確率ではなく、代わりに相対として最もよく解釈できる(他のすべての行の「重み」に対して)任意のcur_odds
重み付けですソートされたテーブルの上部に向かって浮く傾向があります。各行の実際の値は無意味です (たとえば、値が 0.35、0.5、0.75、および 0.99 の 4 つの行がある場合や、値が 35、50、75、および 99 の場合、結果は同じになります)。
更新: クエリで何が起こっているかを次に示します。cur_odds
値が 0.35 の行が 1 つあります。説明のために、残りの 9 行はすべて同じ値 (0.072) であると仮定します。また、説明のために、RAND() が 0.0 から 1.0 までの値を返すと仮定しましょう (実際にはそうかもしれません)。
この SELECT ステートメントを実行するたびに、そのcur_odds
値に 0.0 から 1.0 までの RAND() 値を乗算することによって、各行に並べ替え値が割り当てられます。これは、0.35 の行が 0.0 から 0.35 の間のソート値を持つことを意味します。
1 つおきの行 (値が 0.072) には、0.0 から 0.072 の範囲の並べ替え値があります。これは、ある行の並べ替え値が 0.072 より大きい可能性が約 80% あることを意味します。つまり、他の行がより高く並べ替えられる可能性はありません。cur_odds
これが、値が 0.35 の行が予想よりも頻繁に最初に表示される理由です。
cur_odds
値を相対的な変化の重み付けと誤って説明しました。これは実際には最大相対重み付けとして機能し、関連する実際の相対確率を決定するためにいくつかの複雑な計算が必要になります。
ストレートな T-SQL で何が必要なのかわかりません。私は加重確率ピッカーを何度も実装してきましたが (皮肉なことに、今朝、これに最適な方法について質問するつもりでさえありました)、常にコードで実装しました。