إذا كانت جميع رواتب قسم معين NULL، فإن متوسطه يكون NULL أيضا. عند مقارنة هذا المتوسط برقم، لا تكون نتيجة المقارنة صحيحة أو خاطئة بالمعنى المعتاد، بل تكون غير معروفة. لا يحتفظ HAVING إلا بالمجموعات التي يتحقق شرطها، ولذلك يستبعد هذه المجموعة من النتيجة.
مثال
SELECT department, AVG(salary) AS average_salary
FROM employees
GROUP BY department
HAVING AVG(salary) < 1000;
لا يعرض الاستعلام الأقسام ذات الرواتب المفقودة باعتبار أن متوسطها أقل من ألف. كما أن نفي المقارنة لا يجعل النتيجة غير المعروفة صحيحة. إذا أردت تضمين تلك الأقسام، فاكتب شرطا صريحا مثل OR AVG(salary) IS NULL بحسب المعنى المطلوب للتقرير.
يمكن استخدام COALESCE لاستبدال المتوسط المفقود بصفر قبل المقارنة، لكن ذلك يمنح غياب البيانات معنى عدديا محددا. من الأفضل التمييز بين قسم متوسطه صفر فعلا وقسم لا توجد فيه رواتب معروفة للحساب.
باختصار: المتوسط المفقود لا يحقق المقارنات العددية العادية، ويحتاج إلى شرط صريح إذا أردت تضمينه.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.