sql >> データベース >  >> RDS >> Sqlserver

SQLServerテーブルからランダムな行を取得する方法-SQLServer/TSQLチュートリアルパート117

    シナリオ:

    あなたはSQLServer開発者として働いています。 dbo.Customerテーブルからサンプルのランダムデータを提供するように求められます。テーブルからランダムに100行または合計データの数パーセントを提供するように求められる場合があります。必要な出力を提供するためにどのクエリを使用しますか?

    解決策:

    前回の投稿では、テーブルから上位n行を取得する方法を学びました。選択クエリでTOPを使用して、テーブルから取得する行数またはレコードの割合を指定できます。

    同じTop句を使用できますが、ランダムレコードを指定するように求められます。 、最初にランダムに並べ替える必要があります。 newid()関数を句ごとに使用して、ランダムに並べ替えることができます。

    サンプルデータを使用して、dbo.Customerテーブルを作成しましょう。

    Create table dbo.Customer
     (Id int,
      FName VARCHAR(50),
      LName VARCHAR(50),
      CountryShortName CHAR(2))
    GO
    insert into dbo.Customer
    Values (
    1,'Raza','M','PK'),
    (2,'Rita','John','US'),
    (3,'Sukhi','Singh',Null),
    (4,'James','Smith','CA'),
    (5,'Robert','Ladson','US'),
    (6,'Alice','John','US')
     
     
     1)Order byでNewID()を使用してランダムレコードを取得する
    dbo.Customerテーブルから3つのランダムレコードを取得することに関心がある場合は、以下のクエリを使用できます。

    Select top 3 * From dbo.Customer
    order by NEWID()
     
     
    SQLServerテーブルからランダムレコードを取得する方法-SQLServer/TSQLチュートリアル
     以下に示すように、必要に応じてパーセントを使用することもできます

    Select top 30 percent * From dbo.Customer
    order by NEWID()
     
    NewID()でトップパーセントを使用してSQLServerテーブルからランダムレコードを取得する方法-SQLServer/TSQLチュートリアル
    
    
    2)TABLESAMPLESYSTEMを使用する
    Microsoft Books Onlineによると、「TABLESAMPLE SYSTEMは行のおおよそのパーセンテージを返し、テーブル内の物理的な8 KBページごとにランダムな値を生成します。ページのランダムな値とクエリで指定されたパーセンテージに基づいて、ページはサンプルに含まれるか除外されます。含まれる各ページは、サンプル結果セットのすべての行を返します。」

    ここから、ページ数が少ない小さなテーブルがある場合は、 TableSampleはページ全体を含むか除外するため、使用したくない場合があります。テーブルにレコードが少ない場合は、メソッド1を使用し、大きなテーブルの場合はTableSampleを使用できます。

    dbo.Customerテーブルで以下のクエリを実行すると、レコードが取得されない場合があります。レコードを取得すると、単一のページに配置されたすべてのレコードが返されます。

    Select * From dbo.Customer tablesample (30 percent)
     以下に示すように、テーブルサンプルで必要な行を使用することもできます。返される行は異なる場合があります。 selectクエリでtopnを使用して、それらを制限できます。


    Select * From dbo.Customer tablesample (2 rows)

    合計6行のdbo.Customerテーブルで上記のクエリを実行したとき。行が返されないか、6つすべてが返されました。

    制限する場合は、以下のクエリを使用できます。繰り返しになりますが、複数のデータページにデータがある大きなテーブルでTableSampleを使用することをお勧めします。

    Select top 2 * From dbo.Customer tablesample (2 rows)




    1. UnitilsとDBMaintainer-複数のユーザー/スキームでそれらを機能させる方法は?

    2. mysqlIndexingのパフォーマンスをチェックする方法はありますか

    3. TUPLESを使用してSQLIN句に1000を超えるエントリを配置する

    4. MySQLとMariaDBデータベースのバックアップリソース