Runden
In der vorherigen Übung ergab 10 / 3.0 den Wert 3.33333333333333. Niemand möchte 13,3333333333333 € zahlen, Preise müssen also gerundet werden, und dafür hat SQL eine Funktion.
Eine Funktion ist ein kleines fertiges Programm: Du gibst ihr Werte, und sie liefert ein Ergebnis. Du schreibst ihren Namen und dahinter in Klammern die Werte, mit denen sie arbeiten soll, ihre Argumente, durch Kommas getrennt. In ROUND(10 / 3.0, 2) bekommt die Funktion ROUND zwei Argumente, 10 / 3.0 und 2, und liefert 3.33. SQLite hat Dutzende Funktionen, und in dieser Lektion lernst du die nützlichsten kennen. Ihre Namen sind nicht von der Groß- und Kleinschreibung abhängig (round funktioniert auch), und dieser Kurs schreibt die meisten in Großbuchstaben, wie Schlüsselwörter.
ROUND(x, stellen) rundet die Zahl x auf die angegebene Zahl von Nachkommastellen. Mit einem Argument rundet ROUND(x) auf eine ganze Zahl. Eine Hälfte wird aufgerundet, weg von Null: 2.5 wird zu 3.0 und -2.5 zu -3.0.
SELECT ROUND(3.14159, 2) AS pi, ROUND(2.5) AS halb, ROUND(12.5, 2) AS cent;| pi | halb | cent |
|---|---|---|
| 3.14 | 3.0 | 12.5 |
Zwei Dinge fallen auf. ROUND liefert immer eine Dezimalzahl, auch wenn es auf eine ganze Zahl rundet: 3.0, nicht 3. Und es hängt keine Nullen an: 12.5 auf zwei Stellen gerundet bleibt 12.5, nicht 12.50.
Eine Funktion kannst du überall benutzen, wo ein Wert stehen kann: in SELECT neben Spalten oder in einer Berechnung. Ihre Argumente können auch Spalten und ganze Berechnungen sein. Nehmen wir an, ein Euro kostet 1,17 Dollar. Das sind die Preise in Dollar, auf Cent gerundet:
SELECT titel, preis, ROUND(preis * 1.17, 2) AS dollar
FROM spiele
LIMIT 3;| titel | preis | dollar |
|---|---|---|
| Dragon Forge | 40 | 46.8 |
| Pixel Racer | 15 | 17.55 |
| Moon Farm | 20 | 23.4 |
SQLite arbeitet von innen nach außen: Zuerst multipliziert es den Preis mit 1.17, dann rundet es das Ergebnis. Wie bei jeder Berechnung gib dem Ergebnis mit AS einen Namen; sonst heißt die Spalte wie der ganze Aufruf, ROUND(preis * 1.17, 2).
Eine weitere Funktion für Zahlen ist ABS(x), der Absolutbetrag: die Zahl ohne ihr Minuszeichen. ABS(-5) und ABS(5) sind beide 5. Das ist praktisch, wenn nur die Größe einer Differenz zählt, zum Beispiel wie weit der Preis eines Spiels von 30 € entfernt ist, egal ob darüber oder darunter: ABS(preis - 30).
Typischer Fehler: das Ergebnis einer Ganzzahldivision runden. ROUND(preis / 3, 2) liefert für ein 40-€-Spiel 13.0 und nicht 13.33, denn 40 / 3 ist 13, noch bevor ROUND es bekommt. Das Runden kann nicht zurückbringen, was die Division abgeschnitten hat, also teile durch 3.0.
So schreibst du es:
Anweisungen
- 1
Der Black Friday steht vor der Tür, mit 15 % Rabatt auf jedes Spiel. Zeige den Titel, den Preis und den Angebotspreis als
angebotspreis: den Preis mal 0.85, auf ganze Euro gerundet. Sortiere die Spiele nach dem Titel:titel preis angebotspreis Bakery Story 15 13.0 Castle Siege 30 26.0 Cube Logic 5 4.0 Dragon Forge 40 34.0 … … … - 2
Biete darunter wieder Raten an, diesmal drei: Zeige den Titel, den Preis und den durch 3 geteilten Preis, auf Cent gerundet (zwei Nachkommastellen), als
rate. Sortiere die Spiele nach dem Preis, den höchsten zuerst, und Spiele mit demselben Preis nach dem Titel:titel preis rate Knight's Oath 60 20.0 Goal Rush 50 16.67 Ice Hockey Pro 45 15.0 … … …