В SQL Server можете да използвате TOP
клауза за ограничаване на редовете, върнати от заявка, до определен процент от набора от резултати.
Например, можете да върнете първите 10% от резултатите или какъвто и да е процент, от който се нуждаете.
Пример 1 – Пълният набор от резултати
Първо, нека върнем пълния набор от резултати:
SELECT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Резултат:
+-----------+--------------------------+ | 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 | +-----------+--------------------------+
Така че има 22 реда в пълния набор от резултати.
Пример 2 – Връщане на най-добрите 10% от резултатите
Сега нека върнем първите 10 процента от тези резултати:
SELECT TOP(10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Резултат:
+-----------+-----------------------+ | AlbumId | AlbumName | |-----------+-----------------------| | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | +-----------+-----------------------+
В този случай се връщат три реда.
Може да забележите, че 10 процента от 22 всъщност са 2,2 (а не 3). Очевидно SQL Server не може да представи 2.2 реда, така че закръгля резултатите нагоре.
Пример 2 – Закръгляване нагоре, вместо надолу
В случай, че се чудите защо SQL Server не закръгля резултатите надолу всеки път, когато дробната част е по-малка от 5, разгледайте следния пример.
SELECT TOP(1) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Резултат:
+-----------+-------------+ | AlbumId | AlbumName | |-----------+-------------| | 1 | Powerslave | +-----------+-------------+
Не забравяйте, че пълният набор от резултати имаше 22 реда, така че 1% от 22 реда би означавало, че трябва да бъдат върнати 0,22 реда.
И точно това е причината, поради която не бихме искали да бъдем закръглени надолу. Ако 0,22 реда се закръглят надолу, няма да бъдат върнати редове, което неправилно ни кара да заключим, че няма съвпадения за нашата заявка.
Пример 3 – Нулев процент
Както може да очаквате, използването на 0 процента ще върне нула редове.
SELECT TOP(0) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Резултат:
(0 rows affected)
Пример 4 – Максимален процент
Можете да предоставите само процентни стойности между 0 и 100.
Ето пример за опит за използване на стойност, по-висока от 100:
SELECT TOP(120) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Резултат:
Msg 1031, Level 15, State 1, Line 2 Percent values must be between 0 and 100.
Пример 5 – Отрицателни проценти
Както споменахме, процентните стойности трябва да са между 0 и 100, така че ще получите грешка, ако предоставите отрицателен процент.
SELECT TOP(-10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Резултат:
Msg 1031, Level 15, State 1, Line 3 Percent values must be between 0 and 100.