إذا كان معيار اختيار العميل يعتمد على مجموع طلباته، فيجب حساب المجموع على مستوى العميل ثم تطبيق الشرط على النتيجة. يحقق GROUP BY customer_id الخطوة الأولى، ويحقق HAVING SUM(amount) الخطوة الثانية. هذا يختلف عن فحص مبلغ كل طلب منفرد، لأن عدة طلبات صغيرة قد تحقق الحد المطلوب معا.
مثال
SELECT customer_id, SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 1000;
يظهر العميل إذا تجاوز مجموع مبالغه ألفا، حتى لو لم يتجاوز أي طلب منفرد هذا الرقم. أما إذا ساوى المجموع ألفا بالضبط، فلن يظهر لأن عامل المقارنة المستخدم هو أكبر من، وليس أكبر من أو يساوي.
يمكن إضافة شروط صفوف مثل استبعاد الطلبات الملغاة في WHERE قبل التجميع. عندها يصبح المجموع المحسوب مجموع الطلبات المتبقية فقط، ولذلك يجب أن يعكس ترتيب الشروط المعنى التجاري المطلوب بدقة.
باختصار: استخدم HAVING SUM(amount) لاختيار العملاء بناء على مجموع طلباتهم، مع الانتباه إلى شمول الحد نفسه.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.