sql >> Database teknologi >  >> RDS >> Sqlserver

Returner en procentdel af et resultatsæt i SQL Server

I SQL Server kan du bruge TOP klausul for at begrænse de rækker, der returneres fra en forespørgsel, til en vis procentdel af resultatsættet.

For eksempel kan du returnere de øverste 10 % af resultaterne, eller hvilken procentdel du har brug for.

Eksempel 1 – Det fulde resultatsæt

Lad os først returnere det fulde resultatsæt:

SELECT
  AlbumId,
  AlbumName 
FROM Albums
ORDER BY AlbumId;

Resultat:

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

Så der er 22 rækker i det fulde resultatsæt.

Eksempel 2 – Returner top 10 % af resultaterne

Lad os nu returnere de øverste 10 procent af disse resultater:

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

Resultat:

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

I dette tilfælde returneres tre rækker.

Du vil måske bemærke, at 10 procent af 22 faktisk er 2,2 (ikke 3). Naturligvis kan SQL Server ikke præsentere 2,2 rækker, så det runder resultaterne op.

Eksempel 2 – Afrunding opad i stedet for ned

Hvis du undrer dig over, hvorfor SQL Server ikke runder resultaterne ned når brøkdelen er mindre end 5, så tag et kig på følgende eksempel.

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

Resultat:

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

Husk, at det fulde resultatsæt havde 22 rækker, så 1 procent af 22 rækker ville betyde, at 0,22 rækker skulle returneres.

Og det er netop derfor, vi ikke ønsker at blive rundet ned. Hvis 0,22 rækker rundes ned, vil der ikke blive returneret nogen rækker, hvilket fejlagtigt får os til at konkludere, at der ikke var nogen match for vores forespørgsel.

Eksempel 3 – Nul procent

Som du måske forventer, vil brug af 0 procent returnere nul rækker.

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

Resultat:

(0 rows affected)

Eksempel 4 – Maksimal procentdel

Du kan kun angive procentværdier mellem 0 og 100.

Her er et eksempel på forsøg på at bruge en værdi højere end 100:

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

Resultat:

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

Eksempel 5 – Negative procenter

Som nævnt skal procentværdier være mellem 0 og 100, så du får en fejl, hvis du angiver en negativ procentdel.

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

Resultat:

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

  1. PostgreSQL-replikeringsopsætning og vedligeholdelse ved hjælp af Ansible

  2. SQLite JSON_REPLACE()

  3. Sådan omdøbes en tabel i SQL

  4. SQLite Bestil efter