Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Gibt einen Prozentsatz einer Ergebnismenge in SQL Server zurück

In SQL Server können Sie den TOP verwenden -Klausel, um die von einer Abfrage zurückgegebenen Zeilen auf einen bestimmten Prozentsatz der Ergebnismenge zu begrenzen.

Beispielsweise könnten Sie die besten 10 % der Ergebnisse oder den gewünschten Prozentsatz zurückgeben.

Beispiel 1 – Der vollständige Ergebnissatz

Lassen Sie uns zuerst die vollständige Ergebnismenge zurückgeben:

SELECT
  AlbumId,
  AlbumName 
FROM Albums
ORDER BY AlbumId;

Ergebnis:

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

Es gibt also 22 Zeilen in der vollständigen Ergebnismenge.

Beispiel 2 – Top 10 % der Ergebnisse zurückgeben

Lassen Sie uns nun die besten 10 Prozent dieser Ergebnisse zurückgeben:

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

Ergebnis:

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

In diesem Fall werden drei Zeilen zurückgegeben.

Sie werden vielleicht bemerken, dass 10 Prozent von 22 tatsächlich 2,2 (nicht 3) sind. Offensichtlich kann SQL Server keine 2,2 Zeilen darstellen, also rundet es die Ergebnisse auf.

Beispiel 2 – Aufrunden statt Abrunden

Falls Sie sich fragen, warum SQL Server die Ergebnisse nicht ab rundet Immer wenn der Bruchteil kleiner als 5 ist, sehen Sie sich das folgende Beispiel an.

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

Ergebnis:

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

Denken Sie daran, dass die vollständige Ergebnismenge 22 Zeilen hatte, sodass 1 Prozent von 22 Zeilen bedeuten würde, dass 0,22 Zeilen zurückgegeben werden sollten.

Und genau deshalb möchten wir nicht abgerundet werden. Wenn 0,22 Zeilen abgerundet werden, werden keine Zeilen zurückgegeben, was uns fälschlicherweise zu dem Schluss führt, dass es keine Übereinstimmungen für unsere Abfrage gibt.

Beispiel 3 – Null Prozent

Wie Sie vielleicht erwarten, werden bei Verwendung von 0 Prozent null Zeilen zurückgegeben.

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

Ergebnis:

(0 rows affected)

Beispiel 4 – Maximaler Prozentsatz

Sie können nur Prozentwerte zwischen 0 und 100 angeben.

Hier ist ein Beispiel für den Versuch, einen Wert über 100 zu verwenden:

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

Ergebnis:

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

Beispiel 5 – Negative Prozentsätze

Wie bereits erwähnt, müssen Prozentwerte zwischen 0 und 100 liegen, daher erhalten Sie eine Fehlermeldung, wenn Sie einen negativen Prozentsatz angeben.

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

Ergebnis:

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