SQL Server テーブルから n 行をランダムに選択する 質問する

SQL Server テーブルから n 行をランダムに選択する 質問する

約 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())

このコストは値のキースキャンと結合コストの合計になりますが、選択率が小さい大きなテーブルでは妥当な値です。

おすすめ記事