كيف أختار المجموعات التي تحقق جميع صفوفها شرطا معينا؟

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

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

الإجابة

لاختيار مجموعة تكون جميع مهامها مكتملة، يمكن عد الصفوف المخالفة للشرط ثم طلب أن يكون عددها صفرا. تستخدم CASE لإعطاء المهمة المكتملة صفرا، وإعطاء أي مهمة أخرى واحدا، ثم تجمع هذه الأعداد داخل HAVING. بهذه الطريقة يشمل تعريف المخالفة الحالات غير المعروفة أيضا.

مثال

SELECT project_id
FROM tasks
GROUP BY project_id
HAVING SUM(CASE WHEN status = 'done'
                THEN 0 ELSE 1 END) = 0;

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

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

باختصار: اجمع عدد المخالفات واشترط صفرا، مع معالجة NULL صراحة ضمن الحالات غير المقبولة.

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

اختبر فهمك

أي مشروع يظهر إذا كان المطلوب أن تكون كل مهامه done، وأن تمنع NULL قبول المشروع؟

CREATE TABLE tasks (
  id INT PRIMARY KEY,
  project_id INT,
  status VARCHAR(20)
);
INSERT INTO tasks VALUES
  (1, 1, 'done'), (2, 1, 'done'),
  (3, 2, 'done'), (4, 2, NULL),
  (5, 3, 'done'), (6, 3, 'open');
SELECT project_id
FROM tasks
GROUP BY project_id
HAVING SUM(CASE WHEN status = 'done'
                THEN 0 ELSE 1 END) = 0;