Direkt zum Hauptinhalt springen
eLearner.app
Modul 6 · Lektion 3 von 423/57 im Kurs~10 min
Lektionen des Moduls (3/4)

Numerische Funktionen

PostgreSQL verfügt über alle numerischen Funktionen, die Sie erwarten würden – und noch ein paar mehr Geben Sie Fallstricke ein, die es wert sind, sofort bekannt zu werden.

Die am häufigsten verwendeten Funktionen

SQL
ROUND(price, 2)     -- arrotonda a 2 decimali (banker's rounding "half to even")
CEIL(price)         -- arrotonda per eccesso (verso +∞)
FLOOR(price)        -- arrotonda per difetto (verso −∞)
ABS(-5)             -- 5  (valore assoluto)
MOD(10, 3)          -- 1  (resto della divisione)  — anche 10 % 3
POWER(2, 10)        -- 1024
SQRT(16)            -- 4

ROUND(number, decimals) funktioniert nur, wenn number gleich NUMERIC ist (nicht DOUBLE PRECISION). In unserem Datensatz ist products.price NUMERIC(10,2), wir sind also schon fertig.

Ganzzahl vs. Dezimaldivision

Die klassische Falle:

SQL
SELECT 1 / 2;          -- 0  (entrambi interi → divisione intera!)
SELECT 1.0 / 2;        -- 0.5
SELECT 1::numeric / 2; -- 0.50000000000000000000

Wenn Sie zwei INTEGER-Spalten teilen, erhalten Sie eine INTEGER. Zu vermeiden Kürzung, eines davon umwandeln in NUMERIC oder mit 1.0 multiplizieren:

SQL
-- Sbagliato: percentuale sempre 0 finché numeratore < denominatore
SELECT shipped / total FROM …;

-- Corretto:
SELECT shipped::numeric / total FROM …;
SELECT ROUND(shipped * 100.0 / total, 2) AS percentage FROM …;

Beispiele zum Datensatz

SQL
-- Prezzo scontato del 10%, arrotondato a 2 decimali:
SELECT name,
       price,
       ROUND(price * 0.9, 2) AS discounted_price
FROM   products
ORDER BY id;

-- Prezzo "psicologico" sempre arrotondato per eccesso al multiplo di 1:
SELECT name, CEIL(price) AS rounded_price
FROM   products
WHERE  price < 100
ORDER BY price;

Probieren Sie es aus

Übung#sql.m6.l3.e1
Versuche: 0Wird geladen…

Zeigen Sie für jedes Produkt den Namen, den Preis (Originalpreis) und den Discounted_Price (um 10 % reduzierter Preis, auf 2 Dezimalstellen gerundet) an. Nach ID bestellen.

Editor wird geladen…
Hinweis anzeigen

Reduzieren Sie den Preis um 10 %, indem Sie ihn mit 0,9 multiplizieren und dann mit ROUND(..., 2) runden.

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#sql.m6.l3.e2
Versuche: 0Wird geladen…

Zeigen Sie für jede gelieferte Bestellung (Status = „geliefert“) die ID und „Wartetage“ als ganzzahlige Anzahl von Tagen (abgerundet) zwischen „ordered_at“ und „shipped_at“ an. Sortieren Sie absteigend nach wait_days, dann nach ID.

Editor wird geladen…
Hinweis anzeigen

shipped_at - ordered_at returns an INTERVAL; EXTRACT(EPOCH FROM …) turns it into seconds; divide by 86400 (seconds in a day) and take the FLOOR.

Lösung nach 3 Versuchen verfügbar