0Pricing
SQL Academy · درس

أخطاء شائعة: قيم NULL في التجميعات

تجنب مشكلات NULL الكلاسيكية: تجاهل AVG لقيم NULL، وتخطي COUNT(column) لها، والمفاجآت عند التجميع حسب أعمدة تقبل NULL.

أخطاء شائعة: قيم NULL في التجميعات درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.

تتجاهل الدوال التجميعية قيم NULL

تتجاهل كل دالة تجميعية، باستثناء COUNT(*)، قيم NULL المدخلة. قد يكون هذا ما تريدونه أحيانًا، وقد يكون خطأً في أحيان أخرى.

الفخ الشائع: COUNT(*) مقابل COUNT(col)

تختلف النتائج عندما يحتوي العمود على قيم NULL:

SELECT COUNT(*)         FROM users;      -- 1000
SELECT COUNT(email)     FROM users;      -- 950  (50 users have NULL email)

خطأ: لا تتعامل AVG مع NULL على أنها صفر

التقييمات [5, 5, NULL] → تكون AVG = 5، وليست (5+5+0)/3 = 3.33. حدّدوا ما إذا كانت هذه هي النتيجة المطلوبة.

SELECT AVG(rating) FROM reviews;        -- 5
SELECT AVG(COALESCE(rating, 0)) FROM reviews;   -- 3.33

الجدول الفارغ = دالة تجميعية بقيمة NULL

إذا لم يطابق أي صف الشرط، فإن SUM/AVG/MIN/MAX تُرجع NULL، وليس 0. عالجوا ذلك باستخدام COALESCE:

SELECT COALESCE(SUM(total), 0) AS revenue
FROM orders
WHERE user_id = 999999;       -- safe even when user has no orders

SUM لعمود يحتوي على NULL

إذا كانت قيمة كل صف هي NULL، فإن SUM تُرجع NULL، وليس 0. وهذه هي المشكلة نفسها.

GROUP BY مع مفتاح تجميع بقيمة NULL

تشكّل NULL مجموعة مستقلة:

SELECT country, COUNT(*) FROM users
GROUP BY country;
-- → ('US', 100), ('CA', 30), (NULL, 5)

عدّ القيم المميزة مع NULL

يتجاهل COUNT(DISTINCT col) قيم NULL:

INSERT INTO t (c) VALUES (1),(2),(NULL),(NULL),(2);
SELECT COUNT(DISTINCT c) FROM t;   -- 2 (NULL not counted)

DISTINCT متعدد الأعمدة

تبقى المجموعة التي تحتوي على NULL مميزة عن مجموعة أخرى لها الأعمدة نفسها غير NULL:

SELECT COUNT(*) FROM (
  SELECT DISTINCT a, b FROM t
) sub;

احذروا عمليات الربط الضمنية مع الجداول الاختيارية

يمكن أن يؤدي LEFT JOIN إلى إدخال قيم NULL تغيّر نتيجة الدالة التجميعية. حدّدوا ما إذا كنتم تريدون عدّ هذه الصفوف أو تصفيتها:

SELECT u.id, COUNT(o.id) AS orders
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id;          -- COUNT(o.id) gives 0 for users with no orders

استخدام FILTER للعدّ الشرطي

يُعد FILTER أوضح من وضع CASE داخل SUM:

SELECT COUNT(*) FILTER (WHERE status = 'paid') AS paid_count,
       COUNT(*) FILTER (WHERE status = 'refunded') AS refund_count
FROM orders;

اختبروا الدوال التجميعية دائمًا مع قيم NULL

عند إضافة استعلام تجميعي جديد، شغّلوه على عينة تتضمن قيم NULL. فنادرًا ما يظهر الخطأ في بيانات الاختبار النظيفة.

مراجعة

يُعد الجمع بين NULL والدوال التجميعية أكثر أخطاء SQL شيوعًا.

  • تتجاهل الدوال التجميعية قيم NULL، باستثناء COUNT(*)
  • النتيجة الفارغة → NULL، وليست 0
  • استخدموا COALESCE عندما تكون القيمة 0 مطلوبة
  • انتبهوا جيدًا إلى الدوال التجميعية مع LEFT JOIN

تحقق سريع

لدى Reviews التقييمات [5, 5, NULL, 1]. ما القيمة التي تُرجعها AVG(rating)؟

الأسئلة الشائعة

هل درس «أخطاء شائعة: قيم NULL في التجميعات» مجاني؟

نعم — نص درس «أخطاء شائعة: قيم NULL في التجميعات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «أخطاء شائعة: قيم NULL في التجميعات»؟

تجنب مشكلات NULL الكلاسيكية: تجاهل AVG لقيم NULL، وتخطي COUNT(column) لها، والمفاجآت عند التجميع حسب أعمدة تقبل NULL. تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «أخطاء شائعة: قيم NULL في التجميعات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. COUNT وSUM وAVG وMIN وMAX
  2. GROUP BY لعمود واحد أو عدة أعمدة
  3. HAVING مقابل WHERE
  4. أخطاء شائعة: قيم NULL في التجميعات
← العودة إلى SQL Academy