தொகுதி பாடங்கள் (3/4)
எண் செயல்பாடுகள்
PostgreSQL நீங்கள் எதிர்பார்க்கும் அனைத்து எண் செயல்பாடுகளையும் கொண்டுள்ளது - மேலும் சில வகை ஆபத்துகள் உடனே தெரிந்து கொள்ள வேண்டியவை.
மிகவும் பயன்படுத்தப்படும் செயல்பாடுகள்
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) -- 4number NUMERIC (இல்லை) என்றால் ROUND(number, decimals) மட்டுமே செயல்படும்
DOUBLE PRECISION). எங்கள் தரவுத்தொகுப்பில் products.price என்பது NUMERIC(10,2),
எனவே நாங்கள் ஏற்கனவே அமைத்துவிட்டோம்.
முழு எண் vs தசம பிரிவு
உன்னதமான ஆபத்து:
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 ஆல் பெருக்கவும்:
-- 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 …;தரவுத்தொகுப்பில் எடுத்துக்காட்டுகள்
-- 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;முயற்சி செய்து பாருங்கள்
ஒவ்வொரு தயாரிப்புக்கும் பெயர், விலை (அசல் விலை) மற்றும் தள்ளுபடி_விலை (விலை 10% குறைக்கப்பட்டது, 2 தசமங்களாக வட்டமானது). ஐடி மூலம் ஆர்டர் செய்யுங்கள்.
குறிப்பைக் காட்டு
0.9 ஆல் பெருக்குவதன் மூலம் விலையை 10% குறைக்கவும், பின்னர் ROUND(..., 2) உடன் சுற்றவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
மதிப்பாய்வு பயிற்சி
டெலிவரி செய்யப்பட்ட ஒவ்வொரு ஆர்டருக்கும் (நிலை = 'டெலிவரி'), ஆர்டர்_அட் மற்றும் ஷிப்ட்_அட் ஆகியவற்றுக்கு இடையே உள்ள முழு எண் எண்ணிக்கையாக ஐடி மற்றும் காத்திருப்பு_நாட்களைக் காட்டவும். காத்திருப்பு_நாட்கள் கீழ்நோக்கி, பின்னர் ஐடி மூலம் ஆர்டர் செய்யவும்.
குறிப்பைக் காட்டு
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 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்