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

Restituisce una percentuale di un set di risultati in SQL Server

In SQL Server puoi usare TOP clausola per limitare le righe restituite da una query a una determinata percentuale del set di risultati.

Ad esempio, potresti restituire il primo 10% dei risultati o qualsiasi percentuale tu abbia bisogno.

Esempio 1:l'insieme di risultati completo

Per prima cosa, restituiamo il set di risultati completo:

SELECT
  AlbumId,
  AlbumName 
FROM Albums
ORDER BY AlbumId;

Risultato:

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

Quindi ci sono 22 righe nel set di risultati completo.

Esempio 2:restituisce il 10% dei risultati migliori

Ora restituiamo il primo 10 percento di questi risultati:

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

Risultato:

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

In questo caso vengono restituite tre righe.

Potresti notare che il 10 percento di 22 è in realtà 2,2 (non 3). Ovviamente SQL Server non può presentare 2,2 righe, quindi arrotonda i risultati.

Esempio 2:arrotondamento per eccesso anziché per difetto

Nel caso ti stia chiedendo perché SQL Server non arrotonda i risultati per difetto ogni volta che la parte frazionaria è inferiore a 5, dai un'occhiata al seguente esempio.

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

Risultato:

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

Ricorda che il set di risultati completo aveva 22 righe, quindi l'1 percento di 22 righe significherebbe che dovrebbero essere restituite 0,22 righe.

Ed è proprio per questo che non vorremmo essere arrotondati per difetto. Se 0,22 righe vengono arrotondate per difetto, non verrebbero restituite righe, il che ci porta erroneamente a concludere che non ci sono corrispondenze per la nostra query.

Esempio 3:zero percento

Come ci si potrebbe aspettare, l'utilizzo dello 0 percento restituirà zero righe.

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

Risultato:

(0 rows affected)

Esempio 4 – Percentuale massima

Puoi fornire solo valori percentuali compresi tra 0 e 100.

Ecco un esempio di tentativo di utilizzare un valore maggiore di 100:

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

Risultato:

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

Esempio 5 – Percentuali negative

Come accennato, i valori percentuali devono essere compresi tra 0 e 100, quindi riceverai un errore se fornisci una percentuale negativa.

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

Risultato:

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