ما الفرق بين SUM(a + b) وSUM(a) + SUM(b) عند وجود NULL؟

متوسطقراءة دقيقةآخر تحديث 2 أكتوبر 2026

SQL قواعد البيانات

الإجابة

قد يبدو جمع عمودين داخل SUM مساويا لجمع مجموع كل عمود، لكن القيم المفقودة قد تغير النتيجة. في التعبير a + b، تصبح نتيجة الصف NULL إذا كان أحد الطرفين مفقودا. عندها تتجاهل SUM التعبير كله لذلك الصف، بما فيه الطرف الذي كانت قيمته معروفة.

مثال

SELECT SUM(salary + bonus) AS combined_total,
       SUM(salary) + SUM(bonus) AS separate_total
FROM employees;

أما جمع العمودين بصورة منفصلة فيسمح لكل قيمة معروفة بالمشاركة في مجموع عمودها. ومع ذلك، إذا كان أحد العمودين مفقودا بالكامل، فقد يكون مجموعه NULL، فتكون نتيجة إضافة المجموعين مفقودة أيضا.

إذا كان المعنى المطلوب يعتبر كل قيمة مفقودة صفرا، يمكن كتابة SUM(COALESCE(salary, 0) + COALESCE(bonus, 0)). يجب أن يكون هذا قرارا مقصودا في تفسير البيانات، لأن الراتب المجهول لا يعني بالضرورة راتبا يساوي صفرا.

باختصار: وجود NULL قد يجعل جمع التعبيرات قبل التجميع مختلفا عن جمع الأعمدة كل على حدة.

هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.

اختبر فهمك

ما ناتج combined_total ثم separate_total؟

CREATE TABLE employees (
  id INT PRIMARY KEY,
  salary INT,
  bonus INT
);
INSERT INTO employees VALUES
  (1, 100, NULL),
  (2, 200, 20);
SELECT SUM(salary + bonus) AS combined_total,
       SUM(salary) + SUM(bonus) AS separate_total
FROM employees;