sql >> Database >  >> RDS >> Sqlserver

Retourneer een percentage van een resultaatset in SQL Server

In SQL Server kunt u de TOP . gebruiken clausule om de rijen die door een zoekopdracht worden geretourneerd te beperken tot een bepaald percentage van de resultatenset.

U kunt bijvoorbeeld de top 10% van de resultaten retourneren, of welk percentage u ook nodig heeft.

Voorbeeld 1 – De volledige resultatenset

Laten we eerst de volledige resultatenset retourneren:

SELECT
  AlbumId,
  AlbumName 
FROM Albums
ORDER BY AlbumId;

Resultaat:

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

Er zijn dus 22 rijen in de volledige resultatenset.

Voorbeeld 2 – Top 10% van de resultaten retourneren

Laten we nu de top 10 procent van die resultaten teruggeven:

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

Resultaat:

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

In dit geval worden drie rijen geretourneerd.

Je merkt misschien dat 10 procent van 22 eigenlijk 2,2 is (niet 3). Het is duidelijk dat SQL Server geen 2.2 rijen kan presenteren, dus rondt het de resultaten naar boven af.

Voorbeeld 2 – Naar boven afronden in plaats van naar beneden

Voor het geval je je afvraagt ​​waarom SQL Server de resultaten niet naar beneden afrondt wanneer het breukdeel kleiner is dan 5, kijk dan eens naar het volgende voorbeeld.

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

Resultaat:

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

Onthoud dat de volledige resultatenset 22 rijen had, dus 1 procent van 22 rijen zou betekenen dat 0,22 rijen moeten worden geretourneerd.

En juist daarom willen we niet naar beneden afgerond worden. Als 0,22 rijen naar beneden worden afgerond, zouden er geen rijen worden geretourneerd, waardoor we ten onrechte tot de conclusie zouden komen dat er geen overeenkomsten waren voor onze zoekopdracht.

Voorbeeld 3 – Nul procent

Zoals je zou verwachten, levert het gebruik van 0 procent nul rijen op.

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

Resultaat:

(0 rows affected)

Voorbeeld 4 – Maximaal percentage

U kunt alleen percentages tussen 0 en 100 opgeven.

Hier is een voorbeeld van het proberen om een ​​waarde hoger dan 100 te gebruiken:

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

Resultaat:

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

Voorbeeld 5 – Negatieve percentages

Zoals vermeld, moeten percentagewaarden tussen 0 en 100 liggen, dus u krijgt een foutmelding als u een negatief percentage opgeeft.

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

Resultaat:

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

  1. 4 manieren om te controleren op dubbele rijen in SQL Server

  2. Waarom zou ik mysql_*-functies niet gebruiken in PHP?

  3. Hoe zie ik alle externe sleutels van een tabel of kolom?

  4. Hoe zorg ik ervoor dat de SQLSRV-extensie werkt met PHP, aangezien MSSQL is verouderd?