28- كورس شرح قواعد البيانات MYSQL – MySQL HAVING

# شرح تفصيلي لميزة HAVING في MySQL

تُعد MySQL واحدة من أشهر نظم إدارة قواعد البيانات العلائقية والتي تُستخدم على نطاق واسع في تطوير التطبيقات المختلفة. ومن بين الميزات القوية التي توفرها MySQL هي القدرة على تنفيذ الاستعلامات المعقدة بفضل مجموعة متنوعة من العبارات والأوامر. واحدة من هذه العبارات هي عبارة `HAVING`، والتي تُستخدم لتصفية نتائج المجموعات الناتجة عن [شركة برمجة مصرية] استخدام عبارة `GROUP BY`.

ما هي عبارة HAVING؟

عبارة `HAVING` تُستخدم لتحديد شرط أو مجموعة من الشروط التي يجب أن تحققها المجموعات الناتجة بعد تطبيق `GROUP BY`. بمعنى آخر، تعمل عبارة `HAVING` كمرشح للمجموعات، مما يسمح لك بالتحكم في عرض البيانات التي تحقق شروطًا معينة.

الفرق بين WHERE وHAVING

من المهم ملاحظة الفرق بين `WHERE` و`HAVING` في MySQL:
– **WHERE**: تُستخدم لتصفية الصفوف قبل تجميعها. تُطبق الشروط قبل تنفيذ عملية `GROUP BY`.
– **HAVING**: تُستخدم لتصفية المجموعات بعد أن يتم تجميعها. تُطبق الشروط بعد تنفيذ عملية `GROUP BY`.

استخدام HAVING مع GROUP BY

لنفترض أن لدينا جدولًا باسم `sales` يحتوي على الأعمدة التالية: `id`, `product_name`, `quantity`, و`price`. إذا أردنا حساب إجمالي الإيرادات لكل منتج وتصفية المنتجات التي تحقق إيرادات أقل من 500، يمكننا استخدام الاستعلام التالي:

SELECT product_name, SUM(quantity * price) AS total_revenue
FROM sales
GROUP BY product_name
HAVING total_revenue >= 500;

في هذا الاستعلام:
– نقوم بتجميع الصفوف بحسب `product_name`.
– نحسب إجمالي الإيرادات باستخدام دالة `SUM`.
– نستخدم `HAVING` لتصفية المجموعات التي تحقق شرط أن يكون إجمالي الإيرادات 500 أو أكثر.

أمثلة إضافية

مثال 1: تصفية المجموعات باستخدام أكثر من شرط

إذا أردنا تصفية المنتجات التي تحقق إيرادات بين 500 و1000 فقط، يمكننا استخدام الاستعلام التالي:

SELECT product_name, SUM(quantity * price) AS total_revenue
FROM sales
GROUP BY product_name
HAVING total_revenue >= 500 AND total_revenue <= 1000;

[شركة برمجة مصرية] مثال 2: استخدام HAVING مع دوال التجميع الأخرى

لنفترض أننا نريد حساب عدد المنتجات المباعة لكل منتج وتصفية النتائج لإظهار المنتجات التي بيع منها أكثر من 100 قطعة:

SELECT product_name, COUNT(*) AS total_sold
FROM sales
GROUP BY product_name
HAVING total_sold > 100;

مثال 3: HAVING مع العمليات الحسابية

يمكننا أيضًا استخدام العمليات الحسابية مباشرة داخل عبارة `HAVING`. على سبيل المثال، لتصفية المنتجات التي يكون متوسط السعر فيها أكبر من 50:

SELECT product_name, AVG(price) AS average_price
FROM sales
GROUP BY product_name
HAVING AVG(price) > 50;

الخلاصة

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