ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 6 · 4లో పాఠం 3కోర్సులో 23/57~10 min
మాడ్యూల్ పాఠాలు (3/4)

సంఖ్యా విధులు

PostgreSQL మీరు ఆశించే అన్ని సంఖ్యా ఫంక్షన్‌లను కలిగి ఉంది - ఇంకా కొన్ని రకం ఆపదలు వెంటనే తెలుసుకోవలసినవి.

ఎక్కువగా ఉపయోగించే విధులు

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

number NUMERIC (కాదు) అయితే ROUND(number, decimals) మాత్రమే పని చేస్తుంది DOUBLE PRECISION). మా డేటాసెట్‌లో products.price NUMERIC(10,2), కాబట్టి మేము ఇప్పటికే సెట్ చేసాము.

పూర్ణాంకం vs దశాంశ విభజన

క్లాసిక్ ఆపద:

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

మీరు రెండు INTEGER నిలువు వరుసలను విభజించినప్పుడు మీరు INTEGERని పొందుతారు. నివారించేందుకు కత్తిరించడం, **వాటిలో ఒకదాన్ని NUMERICకి ప్రసారం చేయండి లేదా 1.0తో గుణించండి:

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 …;

డేటాసెట్‌లోని ఉదాహరణలు

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;

దీనిని ప్రయత్నించండి

వ్యాయామం#sql.m6.l3.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

ప్రతి ఉత్పత్తి ప్రదర్శన పేరు, ధర (అసలు ధర) మరియు తగ్గింపు_ధర (ధర 10% తగ్గించబడింది, 2 దశాంశాలకు గుండ్రంగా ఉంటుంది). ID ద్వారా ఆర్డర్ చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

0.9తో గుణించడం ద్వారా ధరను 10% తగ్గించండి, ఆపై ROUND(..., 2)తో రౌండ్ చేయండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం సమీక్షించండి

వ్యాయామం#sql.m6.l3.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

డెలివరీ చేయబడిన ప్రతి ఆర్డర్ కోసం (స్టేటస్ = 'డెలివరీ చేయబడింది'), id మరియు wait_daysని order_at మరియు shipped_at మధ్య రోజుల పూర్ణాంకం సంఖ్య (రౌండ్ డౌన్)గా చూపండి. వెయిట్_డేస్ అవరోహణ ద్వారా, ఆపై ఐడి ద్వారా ఆర్డర్ చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

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.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది