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.