約 50,000 行の SQL Server テーブルがあります。そのうち約 5,000 行をランダムに選択したいと考えています。複雑な方法を考えました。「乱数」列を持つ一時テーブルを作成し、テーブルをそのテーブルにコピーし、一時テーブルをループして各行を更新しRAND()
、そのテーブルから乱数列が 0.1 未満のものを選択します。可能であれば、1 つのステートメントで、より簡単な方法を探しています。
この記事関数の使用をお勧めしますNEWID()
。これは有望に思えますが、特定の割合の行を確実に選択する方法がわかりません。
誰かこれをやったことがある人いますか?何かアイデアはありますか?
ベストアンサー1
select top 10 percent * from [yourtable] order by newid()
大きなテーブルに関する「まったくのゴミ」というコメントへの返答: パフォーマンスを向上させるには、次のようにすることができます。
select * from [yourtable] where [yourPk] in
(select top 10 percent [yourPk] from [yourtable] order by newid())
このコストは値のキースキャンと結合コストの合計になりますが、選択率が小さい大きなテーブルでは妥当な値です。