مرکزی مواد پر جائیں
ماڈیول 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 کو ordered_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 کوششوں کے بعد حل دستیاب ہے۔