HAVING Clause: Difference between revisions

From binaryoption
Jump to navigation Jump to search
Баннер1
(@pipegas_WP)
 
(@CategoryBot: Обновлена категория)
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
=== جملة HAVING في لغة SQL ===
=== جملة HAVING في لغة SQL ===


جملة HAVING في لغة [[SQL]] هي جزء أساسي من الاستعلامات التي تتضمن تجميع البيانات (Aggregation). تُستخدم لتصفية النتائج *بعد* عملية التجميع، على عكس جملة [[WHERE]] التي تُستخدم لتصفية الصفوف *قبل* التجميع.  بمعنى آخر، تسمح لك جملة HAVING بتحديد الشروط التي يجب أن تستوفيها المجموعات الناتجة عن دوال التجميع مثل [[COUNT]] و [[SUM]] و [[AVG]] و [[MIN]] و [[MAX]].
جملة ''HAVING'' في لغة [[SQL]] هي أداة قوية تسمح لك بتصفية نتائج [[مجموعات البيانات]] التي تم تجميعها بواسطة جملة [[GROUP BY]]. على عكس جملة [[WHERE]] التي تقوم بتصفية الصفوف *قبل* التجميع، تعمل جملة ''HAVING'' على تصفية المجموعات *بعد* تجميعها.  هذا يعني أنك تستطيع استخدامها لتطبيق شروط على [[الدوال التجميعية]] مثل [[COUNT]] و [[SUM]] و [[AVG]] و [[MIN]] و [[MAX]].


== متى نستخدم جملة HAVING؟ ==
== الغرض من جملة HAVING==


تخيل أنك تريد معرفة عدد العملاء في كل مدينة والاحتفاظ فقط بالمدن التي لديها أكثر من 5 عملاء.  لا يمكنك استخدام جملة WHERE لتحقيق ذلك، لأن WHERE تعمل على الصفوف الفردية قبل تجميعها.  هنا يأتي دور جملة HAVING.
تُستخدم جملة ''HAVING'' بشكل أساسي للإجابة على أسئلة مثل:


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


بشكل عام، تأتي جملة HAVING بعد جملة GROUP BY (والتي تعتبر ضرورية لاستخدام HAVING) وقبل جملة ORDER BY (إذا كانت موجودة). الصيغة الأساسية هي:
هذه الأسئلة تتطلب تجميع البيانات أولاً (باستخدام ''GROUP BY'') ثم تطبيق شرط على النتيجة المجمعة (باستخدام ''HAVING'').


'''SELECT''' column1, column2, ...
== بناء جملة HAVING==
'''FROM''' table_name
'''WHERE''' condition  /* شرط اختياري لتصفية الصفوف قبل التجميع */
'''GROUP BY''' column1, column2, ...
'''HAVING''' condition  /* شرط لتصفية المجموعات بعد التجميع */
'''ORDER BY''' column1, column2, ... /* ترتيب النتائج اختياري */


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


لنفترض أن لدينا جدولًا باسم "Orders" يحتوي على معلومات حول الطلبات، بما في ذلك معرف العميل (CustomerID) وقيمة الطلب (OrderValue).  نريد معرفة متوسط قيمة الطلب لكل عميل، ولكن فقط للعملاء الذين لديهم أكثر من طلبين.
```sql
SELECT column1, column2, ...
FROM table_name
WHERE condition  -- (اختياري)
GROUP BY column1, column2, ...
HAVING condition -- شرط على المجموعات
ORDER BY column1, column2, ...; -- (اختياري)
```


[[User:Admin|Admin]] ([[User talk:Admin|talk]])sql
*  '''SELECT''' : تحدد الأعمدة التي تريد عرضها.
SELECT CustomerID, AVG(OrderValue) AS AverageOrderValue
*  '''FROM''' : تحدد الجدول الذي تستخرج منه البيانات.
FROM Orders
*  '''WHERE''' : (اختياري) تقوم بتصفية الصفوف *قبل* التجميع.
GROUP BY CustomerID
*  '''GROUP BY''' : تجمع الصفوف التي لها نفس القيم في الأعمدة المحددة.
HAVING COUNT(*) > 2;
*  '''HAVING''' : تقوم بتصفية المجموعات *بعد* التجميع.
[[User:Admin|Admin]] ([[User talk:Admin|talk]])
*  '''ORDER BY''' : (اختياري) تقوم بترتيب النتائج.
 
== الفرق بين WHERE و HAVING ==
 
هذا هو الفرق الرئيسي الذي يجب فهمه:
 
*  '''WHERE''':  تُستخدم لتصفية الصفوف الفردية *قبل* إجراء أي عمليات تجميع.
*  '''HAVING''': تُستخدم لتصفية المجموعات الناتجة *بعد* إجراء عمليات التجميع.
 
ببساطة، إذا كان الشرط يتعلق ببيانات الصفوف الفردية، استخدم ''WHERE''. إذا كان الشرط يتعلق بالبيانات المجمعة، استخدم ''HAVING''.
 
{| class="wikitable"
|+ مقارنة بين WHERE و HAVING
|-
| الميزة || WHERE || HAVING
|-
| وقت التصفية || قبل التجميع || بعد التجميع
|-
| البيانات التي تعمل عليها || الصفوف الفردية || المجموعات
|-
| استخدام الدوال التجميعية || لا يمكن || يمكن
|}
 
== أمثلة عملية ==


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


'''SELECT CustomerID, AVG(OrderValue) AS AverageOrderValue''': نختار معرف العميل ومتوسط قيمة الطلب، ونعطي الاسم المستعار "AverageOrderValue" لمتوسط القيمة.
*  CustomerID (معرف العميل)
'''FROM Orders''':  نحدد الجدول الذي نأخذ منه البيانات.
ProductID (معرف المنتج)
*  '''GROUP BY CustomerID''':  نقوم بتجميع الطلبات حسب معرف العميل.
Quantity (الكمية)
'''HAVING COUNT(*) > 2''':  نُصفّي المجموعات، ونحتفظ فقط بتلك التي تحتوي على أكثر من طلبين (COUNT(*) تحسب عدد الصفوف في كل مجموعة).


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


| الميزة | WHERE | HAVING |
```sql
|---|---|---|
SELECT CustomerID, SUM(Quantity) AS TotalQuantity
| وقت التصفية | قبل التجميع | بعد التجميع |
FROM Orders
| تعمل على | الصفوف الفردية | المجموعات |
GROUP BY CustomerID
| تتطلب GROUP BY | لا | نعم |
HAVING SUM(Quantity) > 5;
| تستخدم مع | شروط على قيم الأعمدة | شروط على دوال التجميع |
```


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


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


[[User:Admin|Admin]] ([[User talk:Admin|talk]])sql
```sql
SELECT ProductID, SUM(SalesAmount) AS TotalSales
SELECT ProductID, AVG(Quantity) AS AverageQuantity
FROM Sales
FROM Orders
GROUP BY ProductID
GROUP BY ProductID
HAVING SUM(SalesAmount) > 1000;
HAVING AVG(Quantity) > 2;
[[User:Admin|Admin]] ([[User talk:Admin|talk]])
```


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


[[User:Admin|Admin]] ([[User talk:Admin|talk]])sql
=== استخدام HAVING مع WHERE ===
SELECT CategoryID, AVG(Rating) AS AverageRating
FROM Products
GROUP BY CategoryID
HAVING AVG(Rating) > 4;
[[User:Admin|Admin]] ([[User talk:Admin|talk]])


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


يمكنك استخدام HAVING مع أكثر من دالة تجميع في نفس الوقت. على سبيل المثال، لإيجاد الفئات التي لديها متوسط تقييم أعلى من 4 نجوم *وأقل* من 50 منتجًا:
'''مثال: إظهار العملاء الذين قاموا بطلب أكثر من 5 منتجات من فئة معينة.'''


[[User:Admin|Admin]] ([[User talk:Admin|talk]])sql
```sql
SELECT CategoryID, AVG(Rating) AS AverageRating, COUNT(*) AS ProductCount
SELECT CustomerID, SUM(Quantity) AS TotalQuantity
FROM Products
FROM Orders
GROUP BY CategoryID
WHERE ProductID = 'CategoryA' -- تصفية الطلبات لفئة معينة
HAVING AVG(Rating) > 4 AND COUNT(*) < 50;
GROUP BY CustomerID
[[User:Admin|Admin]] ([[User talk:Admin|talk]])
HAVING SUM(Quantity) > 5;
```


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


على الرغم من أن جملة HAVING قوية، إلا أنها يمكن أن تؤثر على الأداء إذا لم تستخدم بشكل صحيح.  حاول تصفية البيانات قدر الإمكان باستخدام جملة WHERE قبل التجميع، لأن ذلك يمكن أن يقلل من حجم البيانات التي يجب على جملة HAVING معالجتها. كما أن استخدام [[الفهارس]] على الأعمدة المستخدمة في GROUP BY و HAVING يمكن أن يحسن الأداء بشكل كبير.
*  استخدم ''WHERE'' قدر الإمكان لتصفية البيانات قبل التجميع. هذا يمكن أن يحسن الأداء بشكل كبير.
 
تأكد من أن الأعمدة المستخدمة في جملة ''GROUP BY'' مفهرسة.
== علاقتها بمفاهيم 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]]: استراتيجية بسيطة تعتمد على توقع اتجاه السعر.
*  [[SQL]]
*  [[Touch/No Touch Option]]:  تعتمد على ما إذا كان السعر سيصل إلى مستوى معين أم لا.
*  [[SELECT Statement]]
*  [[Boundary Option]]:  تعتمد على ما إذا كان السعر سيبقى داخل نطاق معين أم لا.
*  [[FROM Clause]]
*  [[60 Second Binary Options]]:  خيارات قصيرة الأجل.
*  [[WHERE Clause]]
*  [[Binary Options Trading Strategies]]:  مجموعة من الاستراتيجيات.
*  [[GROUP BY Clause]]
*  [[ORDER BY Clause]]
*  [[الدوال التجميعية]] (مثل [[COUNT]], [[SUM]], [[AVG]], [[MIN]], [[MAX]])
*  [[Subqueries]]
*  [[Joins]]
*  [[Data Normalization]]
*  [[Database Indexing]]
*  [[SQL Optimization]]
*  [[Transaction Management]]
*  [[Stored Procedures]]
*  [[Triggers]]


== التحليل الفني وتحليل حجم التداول (للمبتدئين) ==
== استراتيجيات التداول ذات الصلة ==


*  [[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]]: مؤشر تتبع الاتجاه.
*  [[استراتيجية RSI]]
*  [[Stochastic Oscillator]]: مؤشر يقيس الزخم.
*  [[استراتيجية MACD]]
*  [[Ichimoku Cloud]]: نظام تحليل شامل.
*  [[استراتيجية Ichimoku Cloud]]


[[Category:الفئة:لغة_SQL]]


== ابدأ التداول الآن ==
== ابدأ التداول الآن ==
Line 136: Line 149:
✓ تنبيهات باتجاهات السوق
✓ تنبيهات باتجاهات السوق
✓ مواد تعليمية للمبتدئين
✓ مواد تعليمية للمبتدئين
[[Category:لغة SQL]]

Latest revision as of 16:42, 6 May 2025

جملة 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 للحصول على: ✓ إشارات تداول يومية ✓ تحليلات استراتيجية حصرية ✓ تنبيهات باتجاهات السوق ✓ مواد تعليمية للمبتدئين

Баннер