W SQL Server możesz użyć TOP
klauzula ograniczająca liczbę wierszy zwracanych z zapytania do określonego procentu zbioru wyników.
Na przykład możesz zwrócić górne 10% wyników lub dowolny procent, którego potrzebujesz.
Przykład 1 – Pełny zestaw wyników
Najpierw zwróćmy pełny zestaw wyników:
SELECT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Wynik:
+-----------+--------------------------+ | 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 | +-----------+--------------------------+
Tak więc w pełnym zestawie wyników są 22 wiersze.
Przykład 2 – zwrot 10% najlepszych wyników
Teraz zwróćmy górne 10 procent tych wyników:
SELECT TOP(10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Wynik:
+-----------+-----------------------+ | AlbumId | AlbumName | |-----------+-----------------------| | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | +-----------+-----------------------+
W takim przypadku zwracane są trzy wiersze.
Możesz zauważyć, że 10 procent z 22 to w rzeczywistości 2,2 (nie 3). Oczywiście SQL Server nie może przedstawić wierszy 2.2, więc zaokrągla wyniki w górę.
Przykład 2 – zaokrąglanie w górę zamiast w dół
Jeśli zastanawiasz się, dlaczego SQL Server nie zaokrągla wyników w dół za każdym razem, gdy część ułamkowa jest mniejsza niż 5, spójrz na następujący przykład.
SELECT TOP(1) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Wynik:
+-----------+-------------+ | AlbumId | AlbumName | |-----------+-------------| | 1 | Powerslave | +-----------+-------------+
Pamiętaj, że pełny zestaw wyników miał 22 wiersze, więc 1 procent z 22 wierszy oznaczałby, że należy zwrócić 0,22 wiersza.
I właśnie dlatego nie chcielibyśmy być zaokrąglani w dół. Jeśli 0,22 wiersza zostanie zaokrąglone w dół, żadne wiersze nie zostaną zwrócone, co błędnie prowadzi nas do wniosku, że nie ma dopasowań dla naszego zapytania.
Przykład 3 – zero procent
Jak można się spodziewać, użycie 0 procent zwróci zero wierszy.
SELECT TOP(0) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Wynik:
(0 rows affected)
Przykład 4 – Maksymalny procent
Możesz podać tylko wartości procentowe z zakresu od 0 do 100.
Oto przykład próby użycia wartości większej niż 100:
SELECT TOP(120) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Wynik:
Msg 1031, Level 15, State 1, Line 2 Percent values must be between 0 and 100.
Przykład 5 – Ujemne wartości procentowe
Jak wspomniano, wartości procentowe muszą mieścić się w zakresie od 0 do 100, więc jeśli podasz ujemną wartość procentową, pojawi się błąd.
SELECT TOP(-10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Wynik:
Msg 1031, Level 15, State 1, Line 3 Percent values must be between 0 and 100.