限制排序的結果

已完成

TOP 子句是 Microsoft 在 SELECT 子句上的專屬延伸。 TOP 可讓您以正整數或所有合格資料列的百分比,指定要傳回的資料列數目。 您可以用常數或運算式來指定資料列數目。 TOP 最常與 ORDER BY 一起使用,但也可用於未排序的資料。

使用 TOP 子句

TOP 子句與 ORDER BY 一起使用的簡化語法如下所示:

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;

結果如下所示:

名稱

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 紅,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;

這個修改過的查詢傳回下列結果:

名稱

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 紅,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

若要傳回一定百分比的合格資料列,請使用 PERCENT 選項搭配 TOP,而不是指定固定數目。

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

PERCENT 也可以與 WITH TIES 選項一起使用。

注意

在決定資料列計數時,TOP(N) PERCENT 會無條件進位到最近整數。

許多 SQL Server 專業人員在設法只擷取一定範圍的資料列時,都使用 TOP 選項。 不過,使用 TOP 時須留意下列事實:

  • TOP 專屬於 T-SQL。
  • TOP 本身不支援跳過資料列。
  • 因為 TOP 依賴 ORDER BY 子句,您不能使用一個排序次序來建立由 TOP 篩選的資料列,又使用另一個排序次序來決定輸出順序。