القسمة الصحيحة مقابل العشرية
تجنّب النتائج المفاجئة باستخدام التحويل النوعي
القسمة الصحيحة مقابل العشرية درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
نتيجة مفاجئة
لنبدأ بلغز. ما النتيجة التي تتوقعون أن يعيدها الاستعلام التالي؟
إذا توقعتم 0.5، فقد تندهشون. ففي العديد من قواعد بيانات SQL، تؤدي قسمة عددين صحيحين إلى نتيجة صحيحة، فتُحذف المنازل العشرية بالكامل.
SELECT 1 / 2 AS result;شرح القسمة الصحيحة
عندما يكون كلا معاملي القسمة عددين صحيحين، ينفّذ SQL قسمة صحيحة. وتُقتطع النتيجة باتجاه الصفر؛ فلا يحدث تقريب، بل يُحتفَظ بجزء العدد الصحيح فقط.
لذلك فإن 1 / 2 = 0، و7 / 3 = 2، و9 / 4 = 2. ويُحذف الجزء الكسري بصمت.
SELECT 7 / 3 AS truncated_result;المزيد من أمثلة القسمة الصحيحة
إليكم عدة أمثلة على القسمة الصحيحة في استعلام واحد. لاحظوا أن جميع النتائج تفقد أجزvاءها العشرية. ويظل هذا السلوك ثابتًا في التعبيرات التي تتضمن قيمًا حرفية صحيحة أو أعمدة صحيحة فقط.
SELECT
10 / 4 AS ten_div_four,
9 / 2 AS nine_div_two,
1 / 3 AS one_div_three,
6 / 6 AS six_div_six;إصلاح المشكلة باستخدام CAST
إن الطريقة الأكثر موثوقية لفرض القسمة العشرية هي إجراء cast لواحد من المعاملين على الأقل إلى نوع عشري. تخبر CAST(value AS DECIMAL) أو CAST(value AS NUMERIC) SQL بأن يتعامل مع العدد كقيمة فاصلة عائمة، فتُعيد القسمة نتيجة دقيقة.
SELECT CAST(1 AS DECIMAL) / 2 AS result;استخدام CAST للطرفين
لا تحتاجون إلا إلى إجراء cast لأحد طرفي القسمة للحصول على نتيجة عشرية؛ إذ سيرقّي SQL المعامل الآخر تلقائيًا. ومع ذلك، فإن إجراء cast للطرفين يوضح المقصود ويتجنب الالتباس عند قراءة الشفرة لاحقًا.
SELECT
CAST(7 AS DECIMAL) / CAST(3 AS DECIMAL) AS both_cast,
CAST(7 AS DECIMAL) / 3 AS one_cast;استخدام قيمة عشرية حرفية
هناك حيلة سريعة أخرى، وهي كتابة أحد المعاملين كقيمة عشرية حرفية بإضافة .0. يرى SQL أن 1.0 عدد عشري، مما يفرض إجراء الحسابات العشرية على التعبير بأكمله.
يفيد ذلك في الاستعلامات السريعة المخصصة، إلا أن CAST أوضح في شفرة الإنتاج.
SELECT 1.0 / 2 AS decimal_result,
7.0 / 3 AS another_result;فخ واقعي: بيانات الأعمدة
تظهر المشكلة بوضوح عند العمل مع الأعمدة الصحيحة. تخيلوا جدولًا يتتبع أهداف المبيعات. يؤدي تقسيم الأعمدة الصحيحة إلى إنتاج نتائج صحيحة، مثل معدل تحويل قيمته 0 بينما يجب أن تكون 0.75!
CREATE TABLE sales_targets (
rep TEXT,
achieved INT,
target INT
);
INSERT INTO sales_targets VALUES
('Alice', 75, 100),
('Bob', 3, 4),
('Carol', 9, 10);
SELECT rep,
achieved / target AS wrong_rate
FROM sales_targets;إصلاح قسمة الأعمدة
طبّق CAST على عمود البسط، وستُرجع القسمة الآن معدل التحويل الفعلي كعدد عشري. ويُرقّى المقام تلقائيًا.
يؤدي الضرب في 100.0 بعد ذلك إلى الحصول على نسبة مئوية، مع الاستمرار في استخدام الحساب العشري طوال العملية.
SELECT rep,
CAST(achieved AS DECIMAL) / target AS conversion_rate,
CAST(achieved AS DECIMAL) / target * 100.0 AS pct
FROM sales_targets;التحكم في الدقة العشرية
يمكنك التحكم في عدد المنازل العشرية المخزّنة من خلال تحديد الدقة والمقياس في عملية التحويل: تعني DECIMAL(10, 2) ما يصل إلى 10 أرقام إجمالًا، منها رقمان بعد الفاصلة العشرية. يكون ذلك مفيدًا عندما تريد مخرجات مرتبة ومقربة بدلًا من أرقام كثيرة تليها منازل عشرية.
SELECT CAST(CAST(1 AS DECIMAL(10,4)) / 3 AS DECIMAL(10,2)) AS rounded_result;تطبيق ROUND بعد القسمة
قد ترغب أحيانًا في إجراء العمليات داخليًا باستخدام الدقة الكاملة، ثم تقريب القيمة النهائية المعروضة. تأخذ الدالة ROUND القيمة وعدد المنازل العشرية التي تريد الإبقاء عليها.
أجرِ القسمة دائمًا أولًا باستخدام الحساب العشري، ثم قرّب النتيجة، ولا تقرّب قبل إجراء القسمة.
SELECT
ROUND(CAST(1 AS DECIMAL) / 3, 4) AS four_places,
ROUND(CAST(1 AS DECIMAL) / 3, 2) AS two_places,
ROUND(CAST(1 AS DECIMAL) / 3, 0) AS zero_places;قد تكون القسمة الصحيحة مفيدة
ليست القسمة الصحيحة خطأً دائمًا، بل قد تكون هي ما تحتاج إليه بالضبط. فعلى سبيل المثال، يحوّل تحويل إجمالي عدد الدقائق إلى ساعات كاملة باستخدام القسمة الصحيحة عمدًا. المهم هو اختيار القسمة الصحيحة أو العشرية عن قصد، بدلًا من الوقوع في إحداهما بالخطأ.
SELECT
137 / 60 AS full_hours,
137 % 60 AS remaining_minutes;تحقق سريع
اختبر مدى فهمك للقسمة الصحيحة مقارنةً بالقسمة العشرية في SQL.
مراجعة الدرس
في هذا الدرس تعلّمت كيفية تعامل SQL مع القسمة بين الأعداد الصحيحة:
- Integer / Integer تقتطع النتيجة، فتُفقد الفاصلة العشرية بصمت.
- استخدم
CAST(value AS DECIMAL)على معامل واحد على الأقل لفرض إجراء القسمة العشرية. - تؤدي كتابة ثابت عشري مثل
1.0أيضًا إلى تحويل التعبير إلى الحساب العشري. - استخدم
ROUNDبعد القسمة للتحكم في عدد المنازل العشرية المعروضة. - تكون القسمة الصحيحة مقصودة أحيانًا، مثل تحويل الدقائق إلى ساعات، ولكن احرص دائمًا على أن يكون ذلك اختيارًا واعيًا لا نتيجةً للخطأ.
انتبه إلى هذا الفخ كلما قسمت أعمدة صحيحة، فهو أحد أكثر أسباب الأخطاء الصامتة التي يصعب اكتشافها في استعلامات SQL.
تعلم SQL مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 46
- الدروس
- 183
الأسئلة الشائعة
هل درس «القسمة الصحيحة مقابل العشرية» مجاني؟
نعم — نص درس «القسمة الصحيحة مقابل العشرية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «القسمة الصحيحة مقابل العشرية»؟
تجنّب النتائج المفاجئة باستخدام التحويل النوعي تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «القسمة الصحيحة مقابل العشرية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الحساب والمعاملات
- التقريب والاقتطاع
- القسمة الصحيحة مقابل العشرية
- دوال رياضية مفيدة