並べ替えられた結果を制限する

完了

TOP 句は、SELECT 句の Microsoft 独自の拡張機能です。 TOP を使用すると、返される行の数を、正の整数、または該当するすべての行の割合として指定できます。 行の数は、定数または式として指定できます。 TOP は、ORDER BY と共に最も頻繁に使用されますが、順序指定されていないデータと共に使用することもできます。

TOP 句を使用する

ORDER BY と共に使用される TOP 句の簡略化された構文は次のとおりです。

SELECT TOP (N) <column_list>
FROM <table_source>
WHERE <search_condition>
ORDER BY <order list> [ASC|DESC];

たとえば、Production.Product テーブルから最も高価な 10 個の製品のみを取得するには、次のクエリを使用します。

SELECT TOP 10 Name, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC;

結果は次のようになります。

Name

ListPrice

Road-150 Red, 62

3578.27

Road-150 Red, 44

3578.27

Road-150 Red, 48

3578.27

Road-150 Red, 52

3578.27

Road-150 Red, 56

3578.27

Mountain-100 Silver, 38

3399.99

Mountain-100 Silver, 42

3399.99

Mountain-100 Silver, 44

3399.99

Mountain-100 Silver, 48

3399.99

Mountain-100 Black, 38

3374.99

TOP 演算子は、選択された行に対して意味のある優先順位を提供するために、ORDER BY 句に依存します。 TOP は ORDER BY なしでも使用できますが、その場合、返される行を予測する方法はありません。 この例では、ORDER BY 句を指定しなかった場合、任意の 10 件の注文が返される可能性があります。

WITH TIES の使用

TOP キーワードでは、返される行の固定数を指定するだけでなく、WITH TIES オプションを指定することもできます。これにより、選択した上位 N 行に含まれる可能性のある値を含むすべての行が取得されます。

前の例では、クエリによって、価格の降順で最初の 10 個の製品が返されました。 しかし、WITH TIES オプションを TOP 句に追加すると、上位 10 個の最も高価な製品に含まれる行が多くなります。

SELECT TOP 10 WITH TIES Name, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC;

この変更されたクエリを実行すると、次の結果が返されます。

Name

ListPrice

Road-150 Red, 62

3578.27

Road-150 Red, 44

3578.27

Road-150 Red, 48

3578.27

Road-150 Red, 52

3578.27

Road-150 Red, 56

3578.27

Mountain-100 Silver, 38

3399.99

Mountain-100 Silver, 42

3399.99

Mountain-100 Silver, 44

3399.99

Mountain-100 Silver, 48

3399.99

Mountain-100 Black, 38

3374.99

Mountain-100 Black, 42

3374.99

Mountain-100 Black, 44

3374.99

Mountain-100 Black, 48

3374.99

WITH TIES を含めるかどうかの決定は、ソース データに関する知識、その一意の値の可能性、および記述するクエリの要件に依存します。

PERCENT の使用

対象となる行の割合を返すには、固定数ではなく TOP と共に PERCENT オプションを使用します。

SELECT TOP 10 PERCENT Name, ListPrice
FROM SalesLT.Product
ORDER BY ListPrice DESC;

PERCENT は WITH TIES オプションと共に使用することもできます。

注意

行数のために、TOP (N) PERCENT を指定すると最も近い整数への切り上げが発生します。

TOP オプションは、特定の範囲の行のみを取得するための方法として多くの SQL Server 専門家によって使用されます。 ただし、TOP を使用する場合は、次の点を考慮してください。

  • TOP は T-SQL 専用です。
  • TOP 単独では、行のスキップをサポートしていません。
  • TOP は ORDER BY 句に依存するため、1 つの並べ替え順序を使用して TOP によってフィルター処理される行を確立し、別の並べ替え順序を使用して出力順を決定することはできません。