اذهب إلى المحتوى

السؤال

Recommended Posts

  • 1
نشر

having تستخدم عند إستخدام group by , ويتم إستخدامها لتصفية المجموعات , بينما where يتم إستخدامها لتصفية التسجيلات

مثال: 

select name, Count(1)
From users
Where rating >4
Group By rating

في هذا الكود يتم إختيار الإسم وعدد العناصر من الجدول users ويتم فلترة التسجيلات حيث يتم إختيار فقط التقييمات الأكبر من 4 , ثم يقسمو مجموعات حسب تقييمهم

حسنا ماذا إن أردنا تصفية المجموعات الناشئة بدلًا من تصفية التسجيلات فقط؟ , إليك مثال

select name, Count(1)
From users
Where rating >4
Group By rating
HAVING count(1)>3

في هذا المثال قمنا بتصفية التسجيلات حيث نختار الطلاب الذين تقييمهم أعلى من 4 وأيضًا قمنا بتصفية المجموعات حيث عرضنا فقط المجموعات التي تحتوي على أكثر من ثلاث طلاب, تلك هي وظيفة العبارة having , أن تقوم بتصفية المجموعات الناشئة من دوال الaggregation

  • 0
نشر

في بعض الاحيان نحتاج لان نطبق شرطا على النتيجة التي حصلنا عليها من تابع التجميع. مثلاً أوجد اسماء الاقسام التي تملك متوسطاً حسابياً لرواتب المدرسين أكبر من 8000 وبالتالي تطبيق where في هكذا استعلام لن يفيدنا شيء لأن where تطبق قبل أن يتم تطبيق تابع التجميع (هنا نقصد التابع avg في مثالنا). وبالتالي ما العمل في هكذا حالة؟؟؟ الحل هو أن نستخدم الشرط اللاحق (جملة having) وهي تشبه where ولكن تعمل بعدها.
Where --> (شرط سابق) اولي
Having--> (شرط لاحق) متأخر

Select.....,function_name(...)
Form.......
Where.....
Group by.....
Having نطبق شرط ما على تابع التجميع

مثال:
اوجد اسماء الاقسام التي يكون متوسط رواتب المدرسين فيها اكبر من 9999 .

Select dept_name , avg (salary)
from instructor
group by dept_name
having avg (salary) >9999

ملاحظة1:
الواصفات الموجودة في select خارج توابع التجميع يجب أن توجد في جزء group by
ملاحظة2:
الواصفات الموجودة في الhaving خارج توابع التجميع يجب أن توجد في group by لأنه يتم تنفيذ group by (يتم إيجاد التجميع المطلوب) ثم يتم تطبيق شرط معين موجود في having بالتسلسل.
نتيجة : يكون لدينا التسلسل الآتي في حال وجود group by + having :

From-->  where -->group by--> having -->select

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...