Zurück zur Artikelliste Artikel
8 Leseminuten

Wie man die ROUND()-Funktion in SQL verwendet

Sie müssen numerische Ergebnisse in SQL runden? Die ROUND()-Funktion ist da, um diese Aufgabe zu erledigen.

Moderne relationale Datenbanken bieten viele integrierte Funktionen, die die Möglichkeiten von SQL erweitern. In diesem Artikel werden wir anhand von praktischen Beispielen erklären, wie die Funktion ROUND() funktioniert. (Spoiler-Alarm: Wenn Sie erraten haben, dass sie eine Zahl auf eine bestimmte Dezimalstelle rundet, liegen Sie richtig! Lesen Sie weiter, um mehr zu erfahren.)

SQL-Standardfunktionen

Jede SQL-Datenbank (PostgreSQL, MySQL, Oracle, SQL Server u. a.) verfügt über eine Reihe von eingebauten Funktionen. Um zu verstehen, was das bedeutet, sollten wir über Funktionen sprechen.

Eine Funktion ist ein vordefiniertes Stück Code, das seine Argumente in ein Ergebnis umwandelt. Die Funktion SUBSTRING() zum Beispiel erhält eine Zeichenkette (d. h. ein Wort, einen Satz usw.) als Argument und gibt einen Teil dieser Zeichenkette zurück. Andere Funktionen wie MAX() (die den größten Wert zurückgibt) und MIN() (die den kleinsten Wert zurückgibt) verarbeiten numerische Daten; mehr über diese Funktionen erfahren Sie in dem Artikel Was sind die SQL-Funktionen MIN() und MAX()?

Eine Funktion kann in einer SQL-Abfrage immer dann aufgerufen werden, wenn Sie einen Wert angeben müssen. Sie können eine Funktion in der SELECT Liste der Spalten, in der WHERE Bedingung oder an jeder anderen Stelle der Abfrage aufrufen, an der ein Wert angegeben werden muss. Es gibt viele Funktionen in SQL, und jede SQL-Datenbank bietet einen anderen Satz von Funktionen.

Wenn Sie nach einem umfassenden Kurs über Funktionen in SQL suchen, besuchen Sie unseren interaktiven Kurs auf Standard-SQL-Funktionen. Er deckt sowohl grundlegende als auch fortgeschrittene SQL-Funktionen ab und vermittelt Ihnen alles, was Sie brauchen, um sie zur Verarbeitung von numerischen, Text- und anderen Datentypen in SQL-Datenbanken einzusetzen.

Was ist die SQL-Funktion ROUND()?

Die Funktion ROUND in SQL wird verwendet, um eine gegebene Zahl auf die nächste ganze Zahl oder auf eine bestimmte Dezimalstelle zu runden. Wir werden mehrere Beispielabfragen mit der Funktion ROUND() zeigen, aber zunächst stellen wir eine SQL-Beispieltabelle namens sales. In dieser Tabelle werden die Verkaufsdaten für einen kleinen Markt aufgezeichnet. Einige der Produkte (z. B. Eier oder Gemüse) werden nach Gewicht verkauft; in diesem Fall wird in der Spalte quantity die Anzahl der verkauften Kilos aufgezeichnet, die Dezimalstellen enthalten kann.

dateselleritemQuantity (in units or kilos)unit_pricetotal
2021-12-06CharlesSoda Bbg 500Ml23.236.46
2021-12-06CharlesIce Cream 10Oz22.765.52
2021-12-06CharlesEgg Pack HpyHen1.20.750.9375
2021-12-06CharlesBanana Ecuador1.872.544.7498
2021-12-07CharlesShampoo A10040.993.96
2021-12-07CharlesBatteries A3101.5315.30
2021-12-07MaryCandy Pack B2012.152.15
2021-12-07MaryBanana Ecuador1.472.543.7338
2021-12-07MaryIce Cream 10Oz12.762.76
2021-12-07MarySoda Bbg 500Ml13.233.23
2021-12-08CharlesEgg Pack HpyHen1.430.751.0725

Beginnen wir mit einer einfachen Abfrage unter Verwendung der Funktion ROUND() in Standard SQL. Wenn wir uns die Spalte total in der sales sehen wir einige Datensätze, bei denen der Wert 3 Dezimalstellen hat. Angenommen, wir möchten einen Bericht erstellen, der alle Verkäufe anzeigt, aber wir möchten nur maximal 2 Dezimalstellen in der Spalte total. Dies ist die Abfrage, die wir verwenden würden:

SELECT 
  date, 
  seller, 
  item, 
  quantity, 
  unit_price, 
  ROUND(total, 2) AS total
FROM sales

Wir sehen, dass die Funktion ROUND() zwei Parameter erhält. Der erste ist der zu rundende numerische Wert (d.h. die Spalte total ); der zweite heißt precision und gibt die Anzahl der Dezimalstellen an, die wir in der gerundeten Zahl beibehalten wollen. Das Ergebnis dieser Abfrage ist unten dargestellt:

dateselleritemquantityunit_pricetotal
2021-12-06CharlesSoda Bbg 500Ml23.236.46
2021-12-06CharlesIce Cream 10Oz22.765.52
2021-12-06CharlesEgg Pack HpyHen1.20.750.94
2021-12-06CharlesBanana Ecuador1.872.544.75
2021-12-07CharlesShampoo A10040.993.96
2021-12-07CharlesBatteries A3101.5315.30
2021-12-07MaryCandy Pack B2012.152.15
2021-12-07MaryBanana Ecuador1.472.543.73
2021-12-07MaryIce Cream 10Oz12.762.76
2021-12-07MarySoda Bbg 500Ml13.233.23
2021-12-08CharlesEgg Pack HpyHen1.430.751.07

In der obigen Spalte total sehen wir das Ergebnis der Funktion ROUND(). Beachten Sie, dass alle Werte von total zwei Dezimalstellen haben. Der Wert wurde auf die nächste Hundertstelstelle gerundet, was bedeutet, dass die Transformation ROUND() keine einfache Trunkierung ist. Zum Beispiel wurde 4.7498 auf 4,75 gerundet, was ein höherer Wert ist; 3.7338 wurde auf 3.73 gerundet, was ein niedrigerer Wert ist.

In der Regel werden Zahlen mit einer 5 oder mehr in der angegebenen Dezimalstelle aufgerundet (4,7498 wird auf 4,75 aufgerundet) und Zahlen unter 5 werden abgerundet (3,7338 wird auf 3,73 abgerundet).

Verwendung der Funktion RUNDEN() mit einem Argument

Die Funktion ROUND(), die wir im vorherigen Beispiel verwendet haben, hatte zwei Argumente: den zu rundenden Wert und precision (2). Das precision gibt die Anzahl der Dezimalstellen an, die im Ergebnis enthalten sein sollen. Sie können jedoch den Parameter precision weglassen. In diesem Fall nimmt ROUND() eine Standardpräzision von 0 an und gibt Ganzzahlwerte mit 0 Dezimalstellen zurück.

Sehen wir uns ein Beispiel an. Angenommen, wir möchten die Gesamteinnahmen unseres Marktes gruppiert nach Verkäufern ermitteln. Wir möchten jedoch einen kompakten und einfachen Bericht mit den Umsatzwerten als ganze Zahlen. Dies ist der Code, den wir in einer MySQL-Datenbank verwenden würden:

SELECT
  seller, 
  ROUND(SUM(total)) as total_revenue
FROM sales
GROUP BY seller

Die Ergebnisse sind unten zu sehen.

sellertotal_revenue
Charles12
Mary38

Verwendung der SQL-Funktion ROUND() in verschiedenen Datenbanken

Im nächsten Beispiel möchten wir das Ergebnis der Funktion ROUND() für bestimmte Werte anzeigen, z. B. für Werte, die mit 0,5 oder 0,0 enden. Zu diesem Zweck zeigen wir eine Abfrage, die demonstriert, wie die Rundung funktioniert:

SELECT 1.20 as Value, ROUND(1.20,1) AS "Round(value,1)" 
UNION
SELECT 1.22 as Value, ROUND(1.22,1) AS "Round(value,1)" 
UNION
SELECT 1.25 as Value, ROUND(1.25,1) AS "Round(value,1)" 
UNION
SELECT 1.27 as Value, ROUND(1.27,1) AS "Round(value,1)" 

Die vorherigen Abfragen verwenden nur Konstanten (d.h. explizit definierte Werte) anstelle von Daten aus einer Tabelle. Deshalb gibt es in der Abfrage keine FROM Klausel. Die Ergebnisse sind:

ValueRound(value,1)
1.201.2
1.221.2
1.251.3
1.271.3

Was die Ergebnisse der Funktion ROUND() betrifft, so können wir feststellen, dass für Werte im Bereich 1.20 bis 1.249999 das Ergebnis von ROUND() 1.2 ist, für Werte im Bereich 1.25 bis 1.299999 jedoch 1.3. Der vielleicht wichtigste Punkt dabei ist, dass 1.25 auf 1.3 gerundet wird.

Die Funktion ROUND() in Oracle ist ähnlich wie die Funktion ROUND() in anderen Datenbanken. Für den Datentyp BINARY_FLOAT implementiert Oracle jedoch eine Variante des Rundungsalgorithmus namens round half to even. Damit werden Zahlen mit einem Bruchteil von 0,5 auf die nächste gerade Ganzzahl gerundet. Daher gibt ROUND(23.5) 24 zurück und ROUND(24.5) gibt auch 24 zurück. Wie bereits erwähnt, gilt dieses Verhalten der Funktion ROUND() nur für den Datentyp BINARY_FLOAT; bei anderen numerischen Datentypen gibt ROUND(24.5) 25 zurück. Wir können dies in der folgenden Beispielabfrage sehen, die in Oracle ausgeführt wird.

SELECT	
  binary_float_value,
  ROUND(binary_float_value), 
  numeric_value,
  ROUND(numeric_value) 
FROM test_round_with_float;

In den Ergebnissen können wir den Unterschied zwischen den beiden Datentypen sehen. ROUND(24.5) gibt 24 zurück, wenn der Datentyp des Arguments BINARY_FLOAT ist; es gibt 25 zurück, wenn der Datentyp irgendein anderer numerischer Datentyp ist (wie NUMBER).

BINARY_FLOAT_VALUEROUND(BINARY_FLOAT_VALUE)NUMERIC_VALUEROUND(NUMERIC_VALUE)
23.52423.524
24.52424.525

Die Verwendung von SQL ROUND() mit negativer Genauigkeit

ROUND() bietet eine andere Funktionalität, wenn der Präzisionsparameter eine negative Zahl ist. Im folgenden Beispiel können wir das nächstgelegene Vielfache von 100 erhalten, indem wir ROUND(value, -2) verwenden. Wir verwenden eine Abfrage, die der vorherigen ähnlich ist, um diese Funktionalität zu zeigen:

SELECT 12345 as Value, ROUND(12345,-2) AS "Round(value,-2)" 
UNION
SELECT 12355 as Value, ROUND(12355,-2) AS "Round(value,-2)" 
UNION
SELECT 12350 as Value, ROUND(12350,-2) AS "Round(value,-2)" 
UNION
SELECT 101 as Value, ROUND(101,-2) AS "Round(value,-2)" 
UNION
SELECT 199 as Value, ROUND(199,-2) AS "Round(value,-2)" 
UNION
SELECT 99 as Value, ROUND(99,-2) AS "Round(value,-2)" 

Die aktuelle Abfrage wird in MS SQL Server ausgeführt. Wie bei der vorherigen Abfrage verwenden wir konstante Daten, um zu zeigen, wie ROUND() funktioniert. Sie können sehen, wie ein precision Parameter von -2 auf verschiedene Werte wirkt. Das Ergebnis von ROUND(value, -2) ist das nächstgelegene Vielfache von 100 zu value. Das Ergebnis der Abfrage ist unten zu sehen:

ValueRound(value, -2)
1234512300
1235512400
1235012400
101100
199200
99100

Verwendung von ROUND() in WHERE

Im folgenden Beispiel zeigen wir, wie die Funktion SQL ROUND() in der Klausel WHERE einer Abfrage verwendet werden kann. Angenommen, wir möchten einen Bericht erstellen, der alle Artikel auflistet, deren Preis mit einer Dezimalstelle unter 50 Cent liegt. Die folgende Bedingung wird diese Preise identifizieren:

ROUND(unit_price) < unit_price

Die Idee hinter der vorherigen Bedingung ist folgende. Wenn der Dezimalteil in der Spalte unit_price kleiner als 0,50 ist, gibt die Funktion ROUND(unit_price) einen niedrigeren Wert zurück (wenn der Preis 3.23 ist, gibt ROUND(3.23) 3.00 zurück, was kleiner als 3,23 ist). Dann ist die gesamte SQL-Abfrage:

SELECT 
  distinct item, 
  unit_price,
  unit_price - ROUND(unit_price) AS decimal_part
FROM sales
WHERE ROUND(unit_price) < unit_price

Wir haben auch ein zusätzliches Feld mit dem Namen decimal_part in die Liste SELECT eingefügt, um zu zeigen, wie man den Dezimalteil einer Zahl mit der Funktion ROUND() berechnet. Die vorhergehende Abfrage wurde in einer PostgreSQL-Datenbank ausgeführt; die Ergebnisse sind unten zu sehen:

itemunit_pricedecimal_part
Candy Pack B202.150.15
Soda Bbg 500Ml3.230.23

Wenn Sie mehr über die Funktion SUM() erfahren möchten, empfehle ich Ihnen, den Artikel SQL SUM() Function Explained with 5 Practical Examples zu lesen.

Verwenden Sie SQL-Funktionen zur Unterstützung Ihrer Abfragen

In diesem Artikel haben wir die Funktion ROUND() in SQL anhand von Beispielen aus verschiedenen Datenbanken erklärt. Unabhängig davon, welche Datenbank Sie bevorzugen, wissen Sie nun, wie ROUND() funktioniert und wie Sie sie in Ihren Abfragen und Berichten verwenden können.

Bevor ich zum Schluss komme, habe ich noch eine Empfehlung für Sie. Mit unserem kostenlosen Standard-SQL-Funktionen Cheat Sheet können Sie schnell Details über die eingebauten SQL-Funktionen, Aggregatfunktionen und mehr finden. Ich benutze es fast jeden Tag, wenn ich mit SQL arbeite. Und vergessen Sie nicht unsere Standard-SQL-Funktionen wo Sie numerische, Text- und Datumsfunktionen lernen und üben können. Steigern Sie Ihre Fähigkeiten, steigern Sie Ihr Vermögen!