முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 6 · பாடம் 3 இன் 4பாடத்திட்டத்தில் 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 தசமங்களாக வட்டமானது). ஐடி மூலம் ஆர்டர் செய்யுங்கள்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

0.9 ஆல் பெருக்குவதன் மூலம் விலையை 10% குறைக்கவும், பின்னர் ROUND(..., 2) உடன் சுற்றவும்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

மதிப்பாய்வு பயிற்சி

உடற்பயிற்சி#sql.m6.l3.e2
முயற்சிகள்: 0ஏற்றுகிறது…

டெலிவரி செய்யப்பட்ட ஒவ்வொரு ஆர்டருக்கும் (நிலை = 'டெலிவரி'), ஆர்டர்_அட் மற்றும் ஷிப்ட்_அட் ஆகியவற்றுக்கு இடையே உள்ள முழு எண் எண்ணிக்கையாக ஐடி மற்றும் காத்திருப்பு_நாட்களைக் காட்டவும். காத்திருப்பு_நாட்கள் கீழ்நோக்கி, பின்னர் ஐடி மூலம் ஆர்டர் செய்யவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

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 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்