मुख्य सामग्री पर जाएं
मॉड्यूल 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लोड हो रहा है...

प्रत्येक वितरित ऑर्डर (स्थिति = 'डिलीवर') के लिए, ऑर्डर_एट और शिप्ड_एट के बीच दिनों की पूर्णांक संख्या के रूप में आईडी और प्रतीक्षा_दिन दिखाएं। प्रतीक्षा_दिनों के अवरोहण के अनुसार ऑर्डर करें, फिर आईडी के अनुसार।

संपादक लोड हो रहा है...
संकेत दिखाएँ

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 प्रयासों के बाद समाधान उपलब्ध है