0Pricing
SQL Academy · Lektion

Ganzzahl- vs. Dezimaldivision

Überraschende Ergebnisse durch Casting vermeiden

Ganzzahl- vs. Dezimaldivision ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Ein überraschendes Ergebnis

Beginnen wir mit einem Rätsel. Was liefert die folgende Abfrage Ihrer Meinung nach?

Wenn Sie 0.5 erwarten, könnte Sie das überraschen. In vielen SQL-Datenbanken ergibt die Division zweier Ganzzahlen ein ganzzahliges Ergebnis — der Dezimalanteil wird vollständig entfernt.

SELECT 1 / 2 AS result;

Ganzzahldivision erklärt

Wenn beide Operanden einer Division Ganzzahlen sind, führt SQL eine Ganzzahldivision durch. Das Ergebnis wird gegen null abgeschnitten — keine Rundung, nur der ganzzahlige Anteil.

Also gilt: 1 / 2 = 0, 7 / 3 = 2 und 9 / 4 = 2. Der Bruchteil wird stillschweigend verworfen.

SELECT 7 / 3 AS truncated_result;

Weitere Beispiele für Ganzzahldivision

Hier sehen Sie mehrere Beispiele für Ganzzahldivision in einer Abfrage. Beachten Sie, dass alle Ergebnisse ihre Dezimalanteile verlieren. Dieses Verhalten ist bei Ausdrücken, die ausschließlich Ganzzahlliterale oder Ganzzahlspalten enthalten, konsistent.

SELECT
  10 / 4  AS ten_div_four,
  9  / 2  AS nine_div_two,
  1  / 3  AS one_div_three,
  6  / 6  AS six_div_six;

Mit CAST beheben

Die zuverlässigste Methode, eine Dezimaldivision zu erzwingen, besteht darin, mindestens einen Operanden in einen Dezimaltyp umzuwandeln. CAST(value AS DECIMAL) oder CAST(value AS NUMERIC) weist SQL an, die Zahl als Gleitkommawert zu behandeln, sodass die Division ein präzises Ergebnis liefert.

SELECT CAST(1 AS DECIMAL) / 2 AS result;

Beide Seiten mit CAST umwandeln

Sie müssen nur eine Seite der Division in einen Dezimalwert umwandeln, um ein dezimales Ergebnis zu erhalten — SQL stuft den anderen Operanden automatisch hoch. Wenn Sie jedoch beide Seiten umwandeln, wird die Absicht eindeutig und es entstehen beim späteren Lesen des Codes keine Missverständnisse.

SELECT
  CAST(7 AS DECIMAL) / CAST(3 AS DECIMAL) AS both_cast,
  CAST(7 AS DECIMAL) / 3                   AS one_cast;

Ein Dezimalliteral verwenden

Ein weiterer schneller Trick besteht darin, einen Operanden durch Hinzufügen von .0 als Dezimalliteral zu schreiben. SQL erkennt 1.0 als Dezimalzahl, wodurch für den gesamten Ausdruck Dezimalarithmetik erzwungen wird.

Das ist praktisch für schnelle Ad-hoc-Abfragen, aber CAST ist im Produktivcode eindeutiger.

SELECT 1.0 / 2  AS decimal_result,
       7.0 / 3  AS another_result;

Praxisfalle: Spaltendaten

Besonders deutlich wird das Problem bei der Arbeit mit Ganzzahlspalten. Stellen Sie sich eine Tabelle vor, die Vertriebsziele erfasst. Die Division von Ganzzahlspalten liefert ganzzahlige Ergebnisse — eine Konversionsrate von 0, obwohl sie 0.75 sein sollte!

CREATE TABLE sales_targets (
  rep         TEXT,
  achieved    INT,
  target      INT
);

INSERT INTO sales_targets VALUES
  ('Alice', 75, 100),
  ('Bob',   3,  4),
  ('Carol', 9,  10);

SELECT rep,
       achieved / target AS wrong_rate
FROM   sales_targets;

Die Division von Spalten korrigieren

Wenden Sie CAST auf die Zählerspalte an; die Division liefert nun die tatsächliche Umrechnungsrate als Dezimalzahl. Der Nenner wird automatisch hochgestuft.

Wenn Sie anschließend mit 100.0 multiplizieren, erhalten Sie einen Prozentsatz – die gesamte Berechnung bleibt dabei in Dezimalarithmetik.

SELECT rep,
       CAST(achieved AS DECIMAL) / target          AS conversion_rate,
       CAST(achieved AS DECIMAL) / target * 100.0  AS pct
FROM   sales_targets;

Dezimalgenauigkeit steuern

Sie können festlegen, wie viele Dezimalstellen gespeichert werden, indem Sie beim Cast Genauigkeit und Skalierung angeben: DECIMAL(10, 2) bedeutet bis zu 10 Ziffern insgesamt, davon 2 nach dem Dezimaltrennzeichen. Das ist nützlich, wenn Sie eine übersichtliche, gerundete Ausgabe anstelle vieler nachfolgender Ziffern wünschen.

SELECT CAST(CAST(1 AS DECIMAL(10,4)) / 3 AS DECIMAL(10,2)) AS rounded_result;

ROUND nach der Division

Manchmal möchten Sie intern mit voller Genauigkeit rechnen und anschließend den endgültig angezeigten Wert runden. Die Funktion ROUND übernimmt den Wert und die Anzahl der Dezimalstellen, die Sie beibehalten möchten.

Teilen Sie immer zuerst – mit Dezimalarithmetik – und runden Sie anschließend. Runden Sie niemals vor der Division.

SELECT
  ROUND(CAST(1 AS DECIMAL) / 3, 4)  AS four_places,
  ROUND(CAST(1 AS DECIMAL) / 3, 2)  AS two_places,
  ROUND(CAST(1 AS DECIMAL) / 3, 0)  AS zero_places;

Ganzzahldivision kann nützlich sein

Ganzzahldivision ist nicht immer ein Fehler – manchmal ist sie genau das, was Sie benötigen. Wenn Sie beispielsweise eine Gesamtzahl von Minuten in ganze Stunden umwandeln, verwenden Sie die Ganzzahldivision bewusst. Entscheidend ist, die Ganzzahl- oder Dezimaldivision gezielt auszuwählen, statt sie versehentlich zu verwenden.

SELECT
  137 / 60  AS full_hours,
  137 % 60  AS remaining_minutes;

Kurzer Test

Testen Sie Ihr Verständnis der Ganzzahl- und Dezimaldivision in SQL.

Zusammenfassung der Lektion

In dieser Lektion haben Sie gelernt, wie SQL die Division zwischen Ganzzahlen verarbeitet:

  • Integer / Integer kürzt das Ergebnis ab – der Dezimalteil geht unbemerkt verloren.
  • Verwenden Sie CAST(value AS DECIMAL) für mindestens einen Operanden, um eine Dezimaldivision zu erzwingen.
  • Auch ein Dezimalliteral wie 1.0 wandelt den Ausdruck in Dezimalarithmetik um.
  • Verwenden Sie ROUND nach der Division, um die Anzahl der angezeigten Dezimalstellen zu steuern.
  • Ganzzahldivision ist manchmal beabsichtigt, z. B. beim Umrechnen von Minuten in Stunden. Treffen Sie diese Entscheidung jedoch bewusst und nicht zufällig.

Achten Sie auf diese Falle, wann immer Sie Ganzzahlspalten dividieren – sie ist eine der häufigsten Ursachen für stille, schwer zu erkennende Fehler in SQL-Abfragen.

Häufig gestellte Fragen

Ist die Lektion „Ganzzahl- vs. Dezimaldivision“ kostenlos?

Ja — der vollständige Text von „Ganzzahl- vs. Dezimaldivision“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Ganzzahl- vs. Dezimaldivision“?

Überraschende Ergebnisse durch Casting vermeiden Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um SQL Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Ganzzahl- vs. Dezimaldivision“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Arithmetik und Operatoren
  2. Runden und Abschneiden
  3. Ganzzahl- vs. Dezimaldivision
  4. Nützliche mathematische Funktionen
← Zurück zu SQL Academy