HAVING Clause
جملة HAVING في لغة SQL
جملة HAVING في لغة SQL هي جزء أساسي من الاستعلامات التي تتضمن تجميع البيانات (Aggregation). تُستخدم لتصفية النتائج *بعد* عملية التجميع، على عكس جملة WHERE التي تُستخدم لتصفية الصفوف *قبل* التجميع. بمعنى آخر، تسمح لك جملة HAVING بتحديد الشروط التي يجب أن تستوفيها المجموعات الناتجة عن دوال التجميع مثل COUNT و SUM و AVG و MIN و MAX.
متى نستخدم جملة HAVING؟
تخيل أنك تريد معرفة عدد العملاء في كل مدينة والاحتفاظ فقط بالمدن التي لديها أكثر من 5 عملاء. لا يمكنك استخدام جملة WHERE لتحقيق ذلك، لأن WHERE تعمل على الصفوف الفردية قبل تجميعها. هنا يأتي دور جملة HAVING.
بناء جملة HAVING
بشكل عام، تأتي جملة HAVING بعد جملة GROUP BY (والتي تعتبر ضرورية لاستخدام HAVING) وقبل جملة ORDER BY (إذا كانت موجودة). الصيغة الأساسية هي:
SELECT column1, column2, ... FROM table_name WHERE condition /* شرط اختياري لتصفية الصفوف قبل التجميع */ GROUP BY column1, column2, ... HAVING condition /* شرط لتصفية المجموعات بعد التجميع */ ORDER BY column1, column2, ... /* ترتيب النتائج اختياري */
مثال توضيحي
لنفترض أن لدينا جدولًا باسم "Orders" يحتوي على معلومات حول الطلبات، بما في ذلك معرف العميل (CustomerID) وقيمة الطلب (OrderValue). نريد معرفة متوسط قيمة الطلب لكل عميل، ولكن فقط للعملاء الذين لديهم أكثر من طلبين.
Admin (talk)sql SELECT CustomerID, AVG(OrderValue) AS AverageOrderValue FROM Orders GROUP BY CustomerID HAVING COUNT(*) > 2; Admin (talk)
في هذا المثال:
- SELECT CustomerID, AVG(OrderValue) AS AverageOrderValue: نختار معرف العميل ومتوسط قيمة الطلب، ونعطي الاسم المستعار "AverageOrderValue" لمتوسط القيمة.
- FROM Orders: نحدد الجدول الذي نأخذ منه البيانات.
- GROUP BY CustomerID: نقوم بتجميع الطلبات حسب معرف العميل.
- HAVING COUNT(*) > 2: نُصفّي المجموعات، ونحتفظ فقط بتلك التي تحتوي على أكثر من طلبين (COUNT(*) تحسب عدد الصفوف في كل مجموعة).
الفرق بين WHERE و HAVING
| الميزة | WHERE | HAVING | |---|---|---| | وقت التصفية | قبل التجميع | بعد التجميع | | تعمل على | الصفوف الفردية | المجموعات | | تتطلب GROUP BY | لا | نعم | | تستخدم مع | شروط على قيم الأعمدة | شروط على دوال التجميع |
أمثلة إضافية
- إيجاد المنتجات التي تجاوز إجمالي مبيعاتها 1000 دولار:
Admin (talk)sql SELECT ProductID, SUM(SalesAmount) AS TotalSales FROM Sales GROUP BY ProductID HAVING SUM(SalesAmount) > 1000; Admin (talk)
- إيجاد الفئات التي لديها متوسط تقييم أعلى من 4 نجوم:
Admin (talk)sql SELECT CategoryID, AVG(Rating) AS AverageRating FROM Products GROUP BY CategoryID HAVING AVG(Rating) > 4; Admin (talk)
استخدام HAVING مع دوال تجميع متعددة
يمكنك استخدام HAVING مع أكثر من دالة تجميع في نفس الوقت. على سبيل المثال، لإيجاد الفئات التي لديها متوسط تقييم أعلى من 4 نجوم *وأقل* من 50 منتجًا:
Admin (talk)sql SELECT CategoryID, AVG(Rating) AS AverageRating, COUNT(*) AS ProductCount FROM Products GROUP BY CategoryID HAVING AVG(Rating) > 4 AND COUNT(*) < 50; Admin (talk)
اعتبارات الأداء
على الرغم من أن جملة HAVING قوية، إلا أنها يمكن أن تؤثر على الأداء إذا لم تستخدم بشكل صحيح. حاول تصفية البيانات قدر الإمكان باستخدام جملة WHERE قبل التجميع، لأن ذلك يمكن أن يقلل من حجم البيانات التي يجب على جملة HAVING معالجتها. كما أن استخدام الفهارس على الأعمدة المستخدمة في GROUP BY و HAVING يمكن أن يحسن الأداء بشكل كبير.
علاقتها بمفاهيم SQL الأخرى
- SELECT: الجزء الأساسي من استعلام SQL.
- FROM: يحدد الجدول أو الجداول المستخدمة في الاستعلام.
- GROUP BY: تُستخدم لتجميع الصفوف بناءً على قيم أعمدة معينة.
- ORDER BY: تُستخدم لترتيب النتائج.
- JOIN: تُستخدم لدمج البيانات من جداول متعددة.
- Subqueries: يمكن استخدامها مع HAVING لتصفية أكثر تعقيدًا.
- Aggregate Functions: دوال مثل COUNT, SUM, AVG, MIN, MAX.
- Indexes: لتحسين أداء الاستعلامات.
- Transactions: ضمان سلامة البيانات.
- Views: استعلامات مخزنة.
- Stored Procedures: مجموعات من أوامر SQL.
- Triggers: إجراءات يتم تنفيذها تلقائيًا استجابةً لأحداث معينة.
- Constraints: قواعد لضمان صحة البيانات.
- Normalization: تنظيم البيانات لتقليل التكرار وتحسين التكامل.
- Data Types: أنواع البيانات المستخدمة في الجداول.
- Database Design: تصميم قاعدة البيانات.
استراتيجيات تداول الخيارات الثنائية ذات الصلة (للمبتدئين)
- High/Low Option: استراتيجية بسيطة تعتمد على توقع اتجاه السعر.
- Touch/No Touch Option: تعتمد على ما إذا كان السعر سيصل إلى مستوى معين أم لا.
- Boundary Option: تعتمد على ما إذا كان السعر سيبقى داخل نطاق معين أم لا.
- 60 Second Binary Options: خيارات قصيرة الأجل.
- Binary Options Trading Strategies: مجموعة من الاستراتيجيات.
التحليل الفني وتحليل حجم التداول (للمبتدئين)
- Moving Averages: مؤشر فني شائع.
- Relative Strength Index (RSI): مؤشر لقياس زخم السعر.
- Bollinger Bands: مؤشر لقياس التقلبات.
- Fibonacci Retracement: أداة لتحديد مستويات الدعم والمقاومة المحتملة.
- Candlestick Patterns: أنماط الشموع اليابانية.
- Volume Analysis: تحليل حجم التداول.
- On Balance Volume (OBV): مؤشر يعتمد على حجم التداول.
- Accumulation/Distribution Line: مؤشر يعتمد على العلاقة بين السعر وحجم التداول.
- Pivot Points: مستويات الدعم والمقاومة.
- Support and Resistance Levels: مستويات الدعم والمقاومة.
- Trend Lines: خطوط الاتجاه.
- Chart Patterns: أنماط الرسوم البيانية.
- MACD: مؤشر تتبع الاتجاه.
- Stochastic Oscillator: مؤشر يقيس الزخم.
- Ichimoku Cloud: نظام تحليل شامل.
ابدأ التداول الآن
سجل في IQ Option (الحد الأدنى للإيداع $10) افتح حساباً في Pocket Option (الحد الأدنى للإيداع $5)
انضم إلى مجتمعنا
اشترك في قناة Telegram الخاصة بنا @strategybin للحصول على: ✓ إشارات تداول يومية ✓ تحليلات استراتيجية حصرية ✓ تنبيهات باتجاهات السوق ✓ مواد تعليمية للمبتدئين