I SQL Server kan du använda TOP
klausul för att begränsa raderna som returneras från en fråga till en viss procentandel av resultatuppsättningen.
Du kan till exempel returnera de översta 10 % av resultaten, eller vilken procentandel du än behöver.
Exempel 1 – Hela resultatuppsättningen
Låt oss först returnera hela resultatuppsättningen:
SELECT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultat:
+-----------+--------------------------+ | AlbumId | AlbumName | |-----------+--------------------------| | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | | 4 | Ziltoid the Omniscient | | 5 | Casualties of Cool | | 6 | Epicloud | | 7 | Somewhere in Time | | 8 | Piece of Mind | | 9 | Killers | | 10 | No Prayer for the Dying | | 11 | No Sound Without Silence | | 12 | Big Swing Face | | 13 | Blue Night | | 14 | Eternity | | 15 | Scandinavia | | 16 | Long Lost Suitcase | | 17 | Praise and Blame | | 18 | Along Came Jones | | 19 | All Night Wrong | | 20 | The Sixteen Men of Tain | | 21 | Yo Wassup | | 22 | Busted | +-----------+--------------------------+
Så det finns 22 rader i hela resultatuppsättningen.
Exempel 2 – Returnera topp 10 % av resultaten
Låt oss nu returnera de översta 10 procenten av dessa resultat:
SELECT TOP(10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultat:
+-----------+-----------------------+ | AlbumId | AlbumName | |-----------+-----------------------| | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | +-----------+-----------------------+
I detta fall returneras tre rader.
Du kanske märker att 10 procent av 22 faktiskt är 2,2 (inte 3). Uppenbarligen kan SQL Server inte presentera 2,2 rader, så det avrundar resultaten uppåt.
Exempel 2 – Avrundning uppåt istället för nedåt
Om du undrar varför SQL Server inte avrundar resultaten nedåt närhelst bråkdelen är mindre än 5, ta en titt på följande exempel.
SELECT TOP(1) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultat:
+-----------+-------------+ | AlbumId | AlbumName | |-----------+-------------| | 1 | Powerslave | +-----------+-------------+
Kom ihåg att hela resultatuppsättningen hade 22 rader, så 1 procent av 22 rader skulle innebära att 0,22 rader skulle returneras.
Och det är just därför vi inte skulle vilja bli avrundade. Om 0,22 rader avrundas nedåt, skulle inga rader returneras, vilket leder till felaktigt slutsatsen att det inte fanns några matchningar för vår fråga.
Exempel 3 – Noll procent
Som du kanske förväntar dig, kommer användning av 0 procent att returnera noll rader.
SELECT TOP(0) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultat:
(0 rows affected)
Exempel 4 – Maximal procentandel
Du kan bara ange procentvärden mellan 0 och 100.
Här är ett exempel på hur du försöker använda ett värde högre än 100:
SELECT TOP(120) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultat:
Msg 1031, Level 15, State 1, Line 2 Percent values must be between 0 and 100.
Exempel 5 – Negativa procentsatser
Som nämnts måste procentvärden vara mellan 0 och 100, så du får ett felmeddelande om du anger en negativ procentsats.
SELECT TOP(-10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultat:
Msg 1031, Level 15, State 1, Line 3 Percent values must be between 0 and 100.