📊 فهم شرط HAVING في SQL: دليل شامل للمبتدئين
HAVING هو أحد أهم الأدوات في SQL التي تسمح لك بتصفية نتائج المجموعات بعد استخدام GROUP BY. إذا كنت تعرف كيفية استخدام WHERE لتصفية الصفوف، فإن HAVING هو النسخة المخصصة لتصفية المجموعات! 🎯
💡 ما هو الفرق بين WHERE و HAVING؟
لفهم HAVING بشكل صحيح، يجب أولاً أن تدرك الفرق الأساسي بينه وبين WHERE:
- WHERE: يُطبق على الصفوف الفردية قبل التجميع
- HAVING: يُطبق على المجموعات بعد التجميع
فكر في الأمر كالتالي: WHERE يختار اللاعبين، بينما HAVING يختار الفرق الفائزة! ⚽
🛠️ البنية الأساسية لـ HAVING
SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1
HAVING condition;
لاحظ أن HAVING يأتي دائماً بعد GROUP BY وقبل ORDER BY إذا وجد.
📝 أمثلة عملية على استخدام HAVING
لنفترض أن لدينا جدول "مبيعات" يحتوي على بيانات المبيعات اليومية:
-- مثال 1: إيجاد المنتجات التي بلغ إجمالي مبيعاتها أكثر من 1000
SELECT product_id, SUM(sales_amount) as total_sales
FROM sales
GROUP BY product_id
HAVING SUM(sales_amount) > 1000;
-- مثال 2: إيجاد الأيام التي كان فيها متوسط المبيعات أعلى من 500
SELECT sale_date, AVG(sales_amount) as average_sales
FROM sales
GROUP BY sale_date
HAVING AVG(sales_amount) > 500;
🔄 استخدام WHERE و HAVING معاً
يمكنك الجمع بين WHERE و HAVING في استعلام واحد للحصول على نتائج دقيقة:
-- إيجاد المنتجات التي بلغ إجمالي مبيعاتها أكثر من 1000 في شهر يناير فقط
SELECT product_id, SUM(sales_amount) as total_sales
FROM sales
WHERE sale_date BETWEEN '2024-01-01' AND '2024-01-31'
GROUP BY product_id
HAVING SUM(sales_amount) > 1000;
في هذا المثال:
- WHERE يختار صفوف يناير فقط (قبل التجميع)
- HAVING يختار المجموعات التي تجاوزت 1000 (بعد التجميع)
⚠️ الأخطاء الشائعة مع HAVING
- نسيان GROUP BY: HAVING لا يعمل بدون GROUP BY
- استخدام HAVING بدلاً من WHERE: لا تستخدم HAVING لتصفية الصفوف الفردية
- خلط أسماء الأعمدة: استخدم الدوال التجميعية في الشرط وليس اسم العمود الجديد
-- خطأ ❌
SELECT product_id, SUM(sales_amount) as total_sales
FROM sales
GROUP BY product_id
HAVING total_sales > 1000;
-- صحيح ✅
SELECT product_id, SUM(sales_amount) as total_sales
FROM sales
GROUP BY product_id
HAVING SUM(sales_amount) > 1000;
🎯 متى تستخدم HAVING؟
استخدم HAVING عندما تحتاج إلى:
- تصفية نتائج المجموعات بعد التجميع
- تطبيق شروط على دوال تجميعية (SUM, AVG, COUNT, etc.)
- تحليل البيانات بناء على معايير إحصائية
🎓 اختبر معلوماتك
السؤال 1 من 30% أكملت
ما هو الفرق الأساسي بين WHERE و HAVING في SQL؟
آخر تحديث: ٢٩ أبريل ٢٠٢٦
التعليقات
شاركنا رأيك أو أسئلتك حول هذا المقال
جاري تحميل التعليقات...