মূল কন্টেন্টে যান
মডিউল 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

ROUND(number, decimals) শুধুমাত্র কাজ করে যদি number হয় NUMERIC (না DOUBLE PRECISION)। আমাদের ডেটাসেটে products.price হল NUMERIC(10,2), তাই আমরা ইতিমধ্যে সেট করছি।

পূর্ণসংখ্যা বনাম দশমিক বিভাগ

ক্লাসিক বিপত্তি:

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লোড হচ্ছে...

প্রতিটি বিতরণ করা অর্ডারের জন্য (স্থিতি = 'ডেলিভারড'), অর্ডার করা_এটি এবং শিপড_এটির মধ্যে দিনের পূর্ণসংখ্যা হিসাবে id এবং wait_days দেখান। অপেক্ষার_দিন অবতরণের মাধ্যমে অর্ডার করুন, তারপর আইডি দ্বারা।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

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 প্রচেষ্টার পরে উপলব্ধ