2016-04-27 10 views
0

SQL Serverでは、1つのフィールドを選択して各行に乱数を割り当てるだけです。 1M行以上がありますので、乱数で並べ替え、ランダムなサンプルとして上位50Kを選択します。sqlのrand()関数の使用に問題がある

私が行う場合:

Select x, rand()*(50000-1)+1) 
From Y 

私が欲しいxの全てを取得し、彼らそれぞれが同じ乱数を持っています。

+0

はちょうどあなたがあなたの番号を生成しているときに、FLOORまたは何か他のものを使用していない場合は「+1」の後に括弧を取ることを忘れないでください。 – Dresden

答えて

0

あなただけランダムに並べ替えるために乱数を使用する場合は、代わりに乱数フィールドをスキップし、あなたはおそらく、任意の値を割り当てる必要はありません

ORDER BY NEWID() 
1

を使用することができ、擬似ランダムでわずか順TOPを値と取る:

SELECT TOP 50000 X FROM Y ORDER BY NEWID() 
+0

ありがとうございます。どのように簡単に説明できますか? NewIDは私にとって初めてのものです – user6114185

+0

@ user6114185: 'NEWID()'はGUIDを返しますので、 'ORDER BY'が働くように新しいGUIDが各行に一時的に割り当てられます。 GUIDは、すべての目的と目的で、決して繰り返されないことが保証されており、とにかく順番に生成されるわけではないので、基本的にはそれが十分にランダムであると信じることができます。 –

関連する問題