Limitare i risultati ordinati

Completato

La clausola TOP è un'estensione di proprietà di Microsoft della clausola SELECT. La clausola TOP consente di specificare il numero di righe da restituire, come numero intero positivo o come percentuale di tutte le righe idonee. Il numero di righe può essere specificato come costante o come espressione. La clausola TOP viene usata più spesso con ORDER BY, ma può essere usata con dati non ordinati.

Utilizzo della clausola TOP

La sintassi semplificata della clausola TOP, usata con la clausola ORDER BY, è la seguente:

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

Ad esempio, per recuperare solo i 10 prodotti più costosi dalla tabella Production.Product, usare la query seguente:

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

I risultati dovrebbero essere simili ai seguenti:

Name

ListPrice

Road-150 rosso, 62

3578.27

Road-150 Red, 44

3578.27

Road-150 Red, 48

3578.27

Road-150 rosso, 52

3578.27

Road-150 rosso, 56

3578.27

Mountain-100 argento, 38

3399.99

Mountain-100 Silver, 42

3399.99

Mountain-100 argento, 44

3399.99

Mountain-100 argento, 48

3399.99

Mountain-100 nero, 38

3374.99

L'operatore TOP dipende da una clausola ORDER BY per fornire una precedenza significativa alle righe selezionate. È possibile usare la clausola TOP senza ORDER BY, ma in tal caso non è possibile prevedere quali righe verranno restituite. In questo esempio potrebbero essere restituiti 10 ordini qualsiasi se non ci fosse una clausola ORDER BY.

Utilizzo dell'opzione WITH TIES

Oltre a specificare un numero fisso di righe da restituire, la parola chiave TOP accetta anche l'opzione WITH TIES, che recupererà tutte le righe con valori che potrebbero essere presenti nelle prime N righe selezionate.

Nell'esempio precedente la query ha restituito i primi 10 prodotti in ordine decrescente di prezzo. Tuttavia, aggiungendo l'opzione WITH TIES alla clausola TOP, si avranno più righe idonee per l'inclusione nei primi 10 prodotti più costosi:

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

Questa query modificata restituisce i risultati seguenti:

Name

ListPrice

Road-150 rosso, 62

3578.27

Road-150 Red, 44

3578.27

Road-150 Red, 48

3578.27

Road-150 rosso, 52

3578.27

Road-150 rosso, 56

3578.27

Mountain-100 argento, 38

3399.99

Mountain-100 Silver, 42

3399.99

Mountain-100 argento, 44

3399.99

Mountain-100 argento, 48

3399.99

Mountain-100 nero, 38

3374.99

Mountain-100 nero, 42

3374.99

Mountain-100 nero, 44

3374.99

Mountain-100 nero, 48

3374.99

La decisione di includere l'opzione WITH TIES dipende dalla conoscenza dei dati di origine, dal potenziale di valori univoci e dai requisiti della query che si sta scrivendo.

Utilizzo dell'opzione PERCENT

Per restituire una percentuale delle righe idonee, usare l'opzione PERCENT con TOP anziché con un numero fisso.

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

L'opzione PERCENT può essere usata anche con l'opzione WITH TIES.

Nota

Ai fini del conteggio delle righe, TOP (N) PERCENT esegue l'arrotondamento al numero intero più vicino.

L'opzione TOP viene usata da molti esperti di SQL Server come metodo per recuperare solo un determinato intervallo di righe. Quando si usa TOP, tuttavia, tenere presente gli aspetti seguenti:

  • TOP è di proprietà di T-SQL.
  • TOP non consente di ignorare le righe automaticamente.
  • Poiché TOP dipende da una clausola ORDER BY, non è possibile usare un ordinamento per stabilire le righe filtrate in base a TOP e un altro per determinare l'ordine di output.