شبكة تعلم مع ناو

كيف يؤثر استبعاد بعض الصفوف قبل التجميع في SUM وHAVING؟

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

مثال

SELECT customer_id, SUM(amount) AS paid_total
FROM orders
WHERE status = 'paid'
GROUP BY customer_id
HAVING SUM(amount) >= 100;

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

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

باختصار: احسب أثر WHERE أولا، لأن HAVING يفحص مجاميع الصفوف التي بقيت فقط.

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

اختبر نفسك

خمسة أسئلة سريعة، مع الإجابة والشرح بعد كل سؤال.