sql >> Databáze >  >> RDS >> Sqlserver

Vraťte procento sady výsledků v SQL Server

V SQL Server můžete použít TOP klauzule k omezení řádků vrácených z dotazu na určité procento sady výsledků.

Můžete například vrátit prvních 10 % výsledků nebo jakékoli procento, které potřebujete.

Příklad 1 – Kompletní sada výsledků

Nejprve vrátíme úplnou sadu výsledků:

SELECT
  AlbumId,
  AlbumName 
FROM Albums
ORDER BY AlbumId;

Výsledek:

+-----------+--------------------------+
| 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                   |
+-----------+--------------------------+

V úplné sadě výsledků je tedy 22 řádků.

Příklad 2 – Návrat prvních 10 % výsledků

Nyní vraťme prvních 10 procent těchto výsledků:

SELECT TOP(10) PERCENT
  AlbumId,
  AlbumName 
FROM Albums
ORDER BY AlbumId;

Výsledek:

+-----------+-----------------------+
| AlbumId   | AlbumName             |
|-----------+-----------------------|
| 1         | Powerslave            |
| 2         | Powerage              |
| 3         | Singing Down the Lane |
+-----------+-----------------------+

V tomto případě jsou vráceny tři řádky.

Můžete si všimnout, že 10 procent z 22 je ve skutečnosti 2,2 (ne 3). Je zřejmé, že SQL Server nemůže prezentovat 2.2 řádky, takže výsledky zaokrouhluje nahoru.

Příklad 2 – Zaokrouhlení nahoru místo dolů

V případě, že vás zajímá, proč SQL Server nezaokrouhluje výsledky dolů kdykoli je zlomková část menší než 5, podívejte se na následující příklad.

SELECT TOP(1) PERCENT
  AlbumId,
  AlbumName 
FROM Albums
ORDER BY AlbumId;

Výsledek:

+-----------+-------------+
| AlbumId   | AlbumName   |
|-----------+-------------|
| 1         | Powerslave  |
+-----------+-------------+

Pamatujte, že celá sada výsledků měla 22 řádků, takže 1 procento z 22 řádků by znamenalo vrátit 0,22 řádků.

A to je přesně důvod, proč bychom nechtěli být zaokrouhleni dolů. Pokud je 0,22 řádků zaokrouhleno dolů, nebudou vráceny žádné řádky, což nás nesprávně vede k závěru, že pro náš dotaz nebyly nalezeny žádné shody.

Příklad 3 – nula procent

Jak můžete očekávat, použití 0 procent vrátí nula řádků.

SELECT TOP(0) PERCENT
  AlbumId,
  AlbumName 
FROM Albums
ORDER BY AlbumId;

Výsledek:

(0 rows affected)

Příklad 4 – Maximální procento

Můžete zadat pouze procentuální hodnoty mezi 0 a 100.

Zde je příklad pokusu použít hodnotu vyšší než 100:

SELECT TOP(120) PERCENT
  AlbumId,
  AlbumName 
FROM Albums
ORDER BY AlbumId;

Výsledek:

Msg 1031, Level 15, State 1, Line 2
Percent values must be between 0 and 100.

Příklad 5 – Záporná procenta

Jak již bylo zmíněno, procentuální hodnoty musí být mezi 0 a 100, takže pokud zadáte záporné procento, zobrazí se chyba.

SELECT TOP(-10) PERCENT
  AlbumId,
  AlbumName 
FROM Albums
ORDER BY AlbumId;

Výsledek:

Msg 1031, Level 15, State 1, Line 3
Percent values must be between 0 and 100.

  1. Linuxové souborové systémy a kontrolní body PostgreSQL

  2. FNDCPASS &AFPASSWD

  3. Jak přidat výchozí omezení do existujícího sloupce na serveru SQL Server

  4. PostgreSQL - Nahraďte HTML entity