SQL ist nicht nur für Text und Tabellen da. In echten Datenbanken hast du oft mit Preisen, Mengen, Punkten, Prozenten, Koordinaten zu tun, also mit Zahlen. Stell dir vor:
- Du berechnest Rabatte und willst den Betrag auf eine ganze Zahl runden.
- Du willst Daten für gerade/ungerade Studenten anzeigen.
- Du machst Analysen zu Noten und willst die Quadratwurzel der Varianz wissen.
- Oder du baust Formeln zur Punkteberechnung mit Potenzen.
SQL kann das alles ohne externe Programmiersprachen – du kannst das direkt in deinen Abfragen mit den eingebauten mathematischen Funktionen machen. Heute schauen wir uns die sechs nützlichsten an:
ROUND()— RundenCEIL()— AufrundenFLOOR()— AbrundenMOD()— Rest bei DivisionPOWER()— PotenzierenSQRT()— Quadratwurzel
* Zahlen runden: ROUND(), CEIL(), FLOOR()*
Oft musst du mit Dezimalzahlen arbeiten (zum Beispiel 4.67891) und das Ergebnis runden. Wenn du z.B. eine Durchschnittsnote, den Endpreis einer Bestellung, einen Rabattprozentsatz usw. berechnest, sehen zu viele Nachkommastellen nicht nur "unschön" aus, sondern können auch verwirren.
ROUND() — Runden nach Mathe-Regeln
ROUND(number [, digits])
number— die Zahl, die du runden willst.digits(optional) — wie viele Nachkommastellen du behalten willst.
Beispiele:
SELECT ROUND(4.67); -- 5
SELECT ROUND(4.6789, 2); -- 4.68
ROUND() funktioniert wie gewohnt beim Runden: 4.5 → 5, 4.49 → 4.
Sehr praktisch, wenn du mit Geld oder Punkten arbeitest, die schön angezeigt werden sollen: 4.33333 → 4.33.
CEIL() — Runden nach oben zur nächsten ganzen Zahl
SELECT CEIL(4.1); -- 5
- Wenn die Zahl schon ganzzahlig ist, bleibt das Ergebnis gleich.
- Gibt immer eine ganze Zahl zurück, nicht kleiner als das Original.
Nützlich, wenn du z.B. die Seitenanzahl für die Anzeige von Produkten berechnen willst: 21 Produkte bei 10 pro Seite → du brauchst 3 Seiten.
FLOOR() — Runden nach unten
SELECT FLOOR(4.9); -- 4
- Gibt eine ganze Zahl zurück, nicht größer als das Original.
Wird benutzt, wenn du wissen willst, auf welcher "Etage" oder "Stufe" ein Wert liegt.
Vergleich:
| Wert | ROUND() | CEIL() | FLOOR() |
|---|---|---|---|
| 4.4 | 4 | 5 | 4 |
| 4.6 | 5 | 5 | 4 |
| -4.6 | -5 | -4 | -5 |
* Rest bei Division: MOD()*
Wofür braucht man den Rest? Zum Beispiel:
- Prüfen, ob eine Zahl gerade ist.
- Zeilen nach Muster in Gruppen aufteilen (z.B. Verteilung auf 3 Teams).
- Einen wiederholenden Zyklus bauen (z.B. "jeden fünften Eintrag").
Syntax:
MOD(dividend, divisor)
Beispiele:
SELECT MOD(17, 5); -- 2 (3*5 +2)
SELECT MOD(10, 3); -- 1 (3*3 +1)
Achtung: Das Vorzeichen des Rests hängt vom Vorzeichen des ersten Arguments (dividend) ab.
Anwendung:
SELECT student_id,
CASE WHEN MOD(student_id, 2) = 0 THEN 'Gerade' ELSE 'Ungerade' END AS parity
FROM students;
* Potenzieren: POWER()*
Manchmal musst du nicht nur multiplizieren, sondern mathematische Formeln anwenden:
- Zinsrechnung:
base * POWER(1 + rate, years) - Kreisfläche:
π * r^2 - Gewichtung von Formeln im Machine Learning
Syntax:
POWER(base, exponent)
Beispiele:
SELECT POWER(2, 3); -- 8
SELECT POWER(5, 2); -- 25
SELECT POWER(9, 0.5); -- 3 (Quadratwurzel)
Die Funktion nimmt alle Zahlen: ganze, Dezimalzahlen, negative.
Quadratwurzel: SQRT()
Wenn du eine Wurzel berechnen musst, besonders in der Statistik (z.B. Standardabweichung), ist SQRT() dein Freund.
SELECT SQRT(25); -- 5
SELECT SQRT(2); -- ~1.4142
Wenn du eine negative Zahl übergibst, gibt es einen Fehler. Falls das vorkommen kann, nutze ABS():
SELECT SQRT(ABS(-25)); -- 5
Praktische Szenarien
Szenario 1: Endsumme einer Bestellung runden
SELECT order_id, ROUND(total_price, 0) AS total_rounded
FROM orders;
Szenario 2: Seitenanzahl berechnen
SELECT CEIL(COUNT(*) / 10.0) AS pages_needed
FROM products;
Szenario 3: Studenten auf 3 Gruppen verteilen
SELECT student_id,
MOD(student_id, 3) AS group_number
FROM students;
Szenario 4: Quadratwurzel vom Mittelwert der Quadrate
SELECT SQRT(AVG(POWER(score, 2))) AS root_mean_square
FROM grades;
Typische Fehler und Tipps
ROUND() kann ein zweites Argument nehmen – vergiss das nicht, wenn du auf Hundertstel runden willst.
MOD() mit negativen Zahlen kann unerwartete Ergebnisse liefern.
POWER() und SQRT() funktionieren mit Dezimalzahlen – nutze CAST() wenn nötig.
Stell sicher, dass bei SQRT() keine negative Zahl reinkommt, sonst gibt's einen Fehler.
GO TO FULL VERSION