Omezení seřazených výsledků

Dokončeno

Klauzule TOP je rozšíření klauzule SELECT proprietární společností Microsoft. Top vám umožní určit, kolik řádků se má vrátit, buď jako kladné celé číslo, nebo jako procento všech opravňujících řádků. Počet řádků lze zadat jako konstantu nebo jako výraz. TOP se nejčastěji používá s ORDER BY, ale dá se použít s neuspořádanými daty.

Použití klauzule TOP

Zjednodušená syntaxe klauzule TOP, která se používá s FUNKCÍ ORDER BY, je následující:

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

Pokud chcete například načíst pouze 10 nejdražších produktů z tabulky Production.Product , použijte následující dotaz:

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

Výsledky můžou vypadat přibližně takto:

Název

ListPrice

Road-150 Red, 62

3578.27

Road-150 Red, 44

3578.27

Road-150 Red, 48

3578.27

Road-150 Červená, 52

3578.27

Road-150 Červená, 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 Black, 38

3374.99

Operátor TOP závisí na klauzuli ORDER BY, která poskytuje smysluplnou prioritu pro vybrané řádky. Top lze použít bez FUNKCE ORDER BY, ale v takovém případě neexistuje způsob, jak předpovědět, které řádky budou vráceny. V tomto příkladu může být vráceno 10 objednávek, pokud nebyla klauzule ORDER BY.

Použití WITH TIES

Kromě zadání pevného počtu řádků, které se mají vrátit, přijme klíčové slovo TOP také možnost WITH TIES, která načte všechny řádky s hodnotami, které mohou být nalezeny ve vybraných n řádcích.

V předchozím příkladu dotaz vrátil prvních 10 produktů v sestupném pořadí ceny. Když ale do klauzule TOP přidáte možnost WITH TIES, uvidíte, že více řádků má nárok na zahrnutí do 10 nejnákladnějších produktů:

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

Tento upravený dotaz vrátí následující výsledky:

Název

ListPrice

Road-150 Red, 62

3578.27

Road-150 Red, 44

3578.27

Road-150 Red, 48

3578.27

Road-150 Červená, 52

3578.27

Road-150 Červená, 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 Black, 38

3374.99

Mountain-100 Black, 42

3374.99

Mountain-100 Black, 44

3374.99

Mountain-100 Black, 48

3374.99

Rozhodnutí zahrnout WITH TIES bude záviset na vašich znalostech zdrojových dat, jeho potenciálu pro jedinečné hodnoty a požadavcích na dotaz, který píšete.

Použití funkce PERCENT

Pokud chcete vrátit procento oprávněných řádků, použijte možnost PERCENT s číslem TOP místo pevného čísla.

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

Procento se dá použít také s možností WITH TIES.

Poznámka:

Pro účely počtu řádků zaokrouhlí funkce TOP (N) PERCENT nahoru na nejbližší celé číslo.

Možnost TOP používá mnoho odborníků na SQL Server jako metodu pro načtení pouze určitého rozsahu řádků. Při použití top však zvažte následující skutečnosti:

  • TOP je proprietární pro T-SQL.
  • TOP sama o sobě nepodporuje přeskakování řádků.
  • Vzhledem k tomu, že top závisí na klauzuli ORDER BY, nelze použít jedno pořadí řazení k vytvoření řádků filtrovaných podle TOP a jiné k určení výstupního pořadí.