Begränsa de sorterade resultaten
TOP-satsen är en Microsoft-patentskyddad förlängning av SELECT-satsen. MED TOP kan du ange hur många rader som ska returneras, antingen som ett positivt heltal eller som en procentandel av alla kvalificerande rader. Antalet rader kan anges som en konstant eller som ett uttryck. TOP används oftast med ORDER BY, men kan användas med osorterade data.
Använda TOP-satsen
Den förenklade syntaxen för TOP-satsen, som används med ORDER BY, är följande:
SELECT TOP (N) <column_list>
FROM <table_source>
WHERE <search_condition>
ORDER BY <order list> [ASC|DESC];
Om du till exempel bara vill hämta de 10 dyraste produkterna från tabellen Production.Product använder du följande fråga:
SELECT TOP 10 Name, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC;
Resultatet kan se ut ungefär så här:
Name
ListPrice
Väg-150 Röd, 62
3578.27
Väg-150 Röd, 44
3578.27
Väg-150 Röd, 48
3578.27
Väg-150 Röd, 52
3578.27
Väg-150 Röd, 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 Svart, 38
3374.99
TOP-operatorn är beroende av en ORDER BY-sats för att ge de valda raderna meningsfull prioritet. TOP kan användas utan ORDER BY, men i så fall finns det inget sätt att förutsäga vilka rader som ska returneras. I det här exemplet kan 10 beställningar returneras om det inte fanns någon ORDER BY-sats.
Använda WITH TIES
Förutom att ange ett fast antal rader som ska returneras accepterar nyckelordet TOP även alternativet WITH TIES, som hämtar alla rader med värden som kan hittas i de markerade översta N raderna.
I föregående exempel returnerade frågan de första 10 produkterna i fallande prisordning. Men genom att lägga till alternativet WITH TIES i TOP-satsen ser du att fler rader kvalificerar sig för inkludering i de 10 dyraste produkterna:
SELECT TOP 10 WITH TIES Name, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC;
Den här ändrade frågan returnerar följande resultat:
Name
ListPrice
Väg-150 Röd, 62
3578.27
Väg-150 Röd, 44
3578.27
Väg-150 Röd, 48
3578.27
Väg-150 Röd, 52
3578.27
Väg-150 Röd, 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 Svart, 38
3374.99
Mountain-100 svart, 42
3374.99
Mountain-100 svart, 44
3374.99
Mountain-100 svart, 48
3374.99
Beslutet att inkludera WITH TIES beror på dina kunskaper om källdata, dess potential för unika värden och kraven för den fråga som du skriver.
Använda PROCENT
Om du vill returnera en procentandel av de berättigade raderna använder du alternativet PROCENT med TOP i stället för ett fast tal.
SELECT TOP 10 PERCENT Name, ListPrice
FROM SalesLT.Product
ORDER BY ListPrice DESC;
PROCENT kan också användas med alternativet WITH TIES.
Kommentar
För radantal avrundar TOP (N) PERCENT upp till närmaste heltal.
Top-alternativet används av många SQL Server-proffs som en metod för att endast hämta ett visst radintervall. Tänk dock på följande fakta när du använder TOP:
- TOP är patentskyddad för T-SQL.
- TOP på egen hand har inte stöd för att hoppa över rader.
- Eftersom TOP är beroende av en ORDER BY-sats kan du inte använda en sorteringsordning för att upprätta de rader som filtreras efter TOP och en annan för att fastställa utdataordningen.