Ogranicz posortowane wyniki

Ukończone

Klauzula TOP jest zastrzeżonym rozszerzeniem klauzuli SELECT firmy Microsoft. Top pozwala określić, ile wierszy ma zostać zwróconych, jako dodatnia liczba całkowita lub procent wszystkich kwalifikowanych wierszy. Liczbę wierszy można określić jako stałą lub jako wyrażenie. Funkcja TOP jest najczęściej używana z elementem ORDER BY, ale może być używana z danymi nieurządzanymi.

Używanie klauzuli TOP

Uproszczona składnia klauzuli TOP używana z klauzulą ORDER BY jest następująca:

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

Aby na przykład pobrać tylko 10 najdroższych produktów z tabeli Production.Product , użyj następującego zapytania:

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

Wyniki mogą wyglądać mniej więcej tak:

Nazwisko

ListPrice

Road-150 Czerwony, 62

3578.27

Road-150 Czerwony, 44

3578.27

Road-150 Czerwony, 48

3578.27

Road-150 Czerwony, 52

3578.27

Road-150 Czerwony, 56

3578.27

Górskie — 100 srebrnych, 38

3399.99

Górskie — 100 srebrnych, 42

3399.99

Górskie — 100 srebrnych, 44

3399.99

Górskie — 100 srebrnych, 48

3399.99

Górskie — 100 czarnych, 38

3374.99

Operator TOP zależy od klauzuli ORDER BY w celu zapewnienia znaczącego pierwszeństwa dla wybranych wierszy. Funkcja TOP może być używana bez funkcji ORDER BY, ale w takim przypadku nie ma możliwości przewidywania, które wiersze zostaną zwrócone. W tym przykładzie wszystkie 10 zamówień mogą być zwracane, jeśli nie ma klauzuli ORDER BY.

Używanie funkcji WITH TIES

Oprócz określenia stałej liczby wierszy, które mają być zwracane, słowo kluczowe TOP akceptuje również opcję WITH TIES, która pobierze wszystkie wiersze z wartościami, które można znaleźć w wybranych pierwszych N wierszach.

W poprzednim przykładzie zapytanie zwróciło pierwsze 10 produktów w kolejności malejącej ceny. Jednak dodając opcję WITH TIES do klauzuli TOP, zobaczysz, że więcej wierszy kwalifikuje się do włączenia do 10 najdroższych produktów:

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

To zmodyfikowane zapytanie zwraca następujące wyniki:

Nazwisko

ListPrice

Road-150 Czerwony, 62

3578.27

Road-150 Czerwony, 44

3578.27

Road-150 Czerwony, 48

3578.27

Road-150 Czerwony, 52

3578.27

Road-150 Czerwony, 56

3578.27

Górskie — 100 srebrnych, 38

3399.99

Górskie — 100 srebrnych, 42

3399.99

Górskie — 100 srebrnych, 44

3399.99

Górskie — 100 srebrnych, 48

3399.99

Górskie — 100 czarnych, 38

3374.99

Mountain-100 Black, 42

3374.99

Mountain-100 Black, 44

3374.99

Mountain-100 Black, 48

3374.99

Decyzja o dołączeniu funkcji WITH TIES będzie zależeć od twojej wiedzy na temat danych źródłowych, jego potencjału dla unikatowych wartości oraz wymagań zapytania, które piszesz.

Korzystanie z procentu

Aby zwrócić wartość procentową kwalifikujących się wierszy, użyj opcji PERCENT z opcją TOP zamiast stałej liczby.

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

Wartość PERCENT może być również używana z opcją WITH TIES.

Uwaga

Dla celów liczby wierszy wartość TOP (N) PERCENT będzie zaokrąglać w górę do najbliższej liczby całkowitej.

Opcja TOP jest używana przez wielu specjalistów programu SQL Server jako metodę pobierania tylko określonego zakresu wierszy. Należy jednak wziąć pod uwagę następujące fakty podczas korzystania z top:

  • TOP jest własnością języka T-SQL.
  • Funkcja TOP na własną rękę nie obsługuje pomijania wierszy.
  • Ponieważ top zależy od klauzuli ORDER BY, nie można użyć jednej kolejności sortowania, aby ustanowić wiersze filtrowane według TOP i drugiego w celu określenia kolejności danych wyjściowych.