HAVING Clause

From binaryoption
Jump to navigation Jump to search
Баннер1

جملة HAVING في لغة SQL

جملة HAVING في لغة SQL هي أداة قوية تسمح لك بتصفية نتائج مجموعات البيانات التي تم تجميعها بواسطة جملة GROUP BY. على عكس جملة WHERE التي تقوم بتصفية الصفوف *قبل* التجميع، تعمل جملة HAVING على تصفية المجموعات *بعد* تجميعها. هذا يعني أنك تستطيع استخدامها لتطبيق شروط على الدوال التجميعية مثل COUNT و SUM و AVG و MIN و MAX.

الغرض من جملة HAVING

تُستخدم جملة HAVING بشكل أساسي للإجابة على أسئلة مثل:

  • "أظهر لي جميع الأقسام التي لديها متوسط رواتب أعلى من 50000."
  • "أظهر لي جميع المنتجات التي بيعت أكثر من 100 وحدة."
  • "أظهر لي جميع العملاء الذين قاموا بأكثر من 5 طلبات."

هذه الأسئلة تتطلب تجميع البيانات أولاً (باستخدام GROUP BY) ثم تطبيق شرط على النتيجة المجمعة (باستخدام HAVING).

بناء جملة HAVING

تأتي جملة HAVING عادة بعد جملة GROUP BY وقبل جملة ORDER BY (إن وجدت). بنيتها الأساسية هي:

```sql SELECT column1, column2, ... FROM table_name WHERE condition -- (اختياري) GROUP BY column1, column2, ... HAVING condition -- شرط على المجموعات ORDER BY column1, column2, ...; -- (اختياري) ```

  • SELECT : تحدد الأعمدة التي تريد عرضها.
  • FROM : تحدد الجدول الذي تستخرج منه البيانات.
  • WHERE : (اختياري) تقوم بتصفية الصفوف *قبل* التجميع.
  • GROUP BY : تجمع الصفوف التي لها نفس القيم في الأعمدة المحددة.
  • HAVING : تقوم بتصفية المجموعات *بعد* التجميع.
  • ORDER BY : (اختياري) تقوم بترتيب النتائج.

الفرق بين WHERE و HAVING

هذا هو الفرق الرئيسي الذي يجب فهمه:

  • WHERE: تُستخدم لتصفية الصفوف الفردية *قبل* إجراء أي عمليات تجميع.
  • HAVING: تُستخدم لتصفية المجموعات الناتجة *بعد* إجراء عمليات التجميع.

ببساطة، إذا كان الشرط يتعلق ببيانات الصفوف الفردية، استخدم WHERE. إذا كان الشرط يتعلق بالبيانات المجمعة، استخدم HAVING.

مقارنة بين WHERE و HAVING
الميزة WHERE HAVING
وقت التصفية قبل التجميع بعد التجميع
البيانات التي تعمل عليها الصفوف الفردية المجموعات
استخدام الدوال التجميعية لا يمكن يمكن

أمثلة عملية

لنفترض أن لدينا جدولًا باسم "Orders" يحتوي على الأعمدة التالية:

  • CustomerID (معرف العميل)
  • ProductID (معرف المنتج)
  • Quantity (الكمية)

مثال 1: إظهار العملاء الذين قاموا بطلب أكثر من 5 منتجات.

```sql SELECT CustomerID, SUM(Quantity) AS TotalQuantity FROM Orders GROUP BY CustomerID HAVING SUM(Quantity) > 5; ```

في هذا المثال، نقوم بتجميع الطلبات حسب CustomerID ثم نستخدم HAVING لتصفية المجموعات التي يكون فيها مجموع الكميات أكبر من 5.

مثال 2: إظهار المنتجات التي بيعت بمتوسط كمية أكبر من 2.

```sql SELECT ProductID, AVG(Quantity) AS AverageQuantity FROM Orders GROUP BY ProductID HAVING AVG(Quantity) > 2; ```

هنا، نقوم بتجميع الطلبات حسب ProductID ثم نستخدم HAVING لتصفية المجموعات التي يكون فيها متوسط الكمية أكبر من 2.

استخدام HAVING مع WHERE

يمكنك استخدام كل من WHERE و HAVING في نفس الاستعلام. في هذه الحالة، يتم تطبيق WHERE أولاً لتصفية الصفوف الفردية، ثم يتم تطبيق GROUP BY لتجميع الصفوف المتبقية، وأخيرًا يتم تطبيق HAVING لتصفية المجموعات.

مثال: إظهار العملاء الذين قاموا بطلب أكثر من 5 منتجات من فئة معينة.

```sql SELECT CustomerID, SUM(Quantity) AS TotalQuantity FROM Orders WHERE ProductID = 'CategoryA' -- تصفية الطلبات لفئة معينة GROUP BY CustomerID HAVING SUM(Quantity) > 5; ```

اعتبارات الأداء

  • استخدم WHERE قدر الإمكان لتصفية البيانات قبل التجميع. هذا يمكن أن يحسن الأداء بشكل كبير.
  • تأكد من أن الأعمدة المستخدمة في جملة GROUP BY مفهرسة.

مواضيع ذات صلة

استراتيجيات التداول ذات الصلة


ابدأ التداول الآن

سجل في IQ Option (الحد الأدنى للإيداع $10) افتح حساباً في Pocket Option (الحد الأدنى للإيداع $5)

انضم إلى مجتمعنا

اشترك في قناة Telegram الخاصة بنا @strategybin للحصول على: ✓ إشارات تداول يومية ✓ تحليلات استراتيجية حصرية ✓ تنبيهات باتجاهات السوق ✓ مواد تعليمية للمبتدئين

Баннер