SQL Serverでランダムに行を抽出する
SQL Serverでは、 ORDER BY で NEWID() を使うと、行をランダムな順序に並べ替えることができます。 TOP 10 のように指定すれば、その行数分だけをランダムに取得できます。 SELECT TOP 10 * FROM SomeTable ORDER BY NEWID(); ただし、行数の多いテーブルに対してこの方法を使うと、処理コストが高くなります。全行に対してランダムな値を生成し、その結果を並べ替える必要があるためです。 このような場合は、 TABLESAMPLE を使うことで、ある程度処理コストを抑えられます。ただし、 TABLESAMPLE はページ単位でデータを取得するため、行単位で完全にランダムに抽出されるわけではありません。また、指定した行数が必ず取得されるとは限りません。 そのため、実際に取得したい行数よりも多めに候補を取得し、その候補に対して ORDER BY NEWID() を使う方法が考えられます。 WITH candidates AS ( SELECT * FROM SomeTable TABLESAMPLE (1000 ROWS) ) SELECT TOP 10 * FROM candidates ORDER BY NEWID(); この方法であれば、全件を並べ替える場合に比べて処理コストを抑えつつ、ランダムに近い抽出ができます。 NEWID(Transact-SQL) - SQL Server | Microsoft Learn HM インプラス株式会社