SQLوضع شروط على الأسطر التي تم تجميعها
- الجملة HAVING
- تجهيز قاعدة البيانات التي سنطبق عليها
- أمثلة حول وضع شروط بعد تجميع قيم الأعمدة
الجملة HAVING
في حال تجميع الحقول بواسطة الجملة GROUP BY و إجراء إحصاء ما عليها بواسطة إحدى الدوال التجميعية يمكن استخدام الجملة HAVING لإعادة فلترة الأسطر المجمعة.
إذاً الجملة HAVING تسمح بوضع شروط يتم تطبيقها على الأسطر المجمعة لتحديد أي منها سيتم إبقاؤه في النتيجة النهائية.
كمثال بسيط، في حال كنت تريد إجراء إحصاء لمعرفة متوسط رواتب موظفي الشركة في كل بلد، و بعد معرفة متوسط الرواتب في كل بلد تريد معرفة أي بلدان تعطي موظفيها متوسط راتب يتجاوز 800 دولار. هنا نقوم بتجميع الرواتب على حسب البلدان و من ثم نحسب متوسط الراتب في كل بلد، و في النهاية نقوم بفلترة الأسطر و إبقاء التي يتجاوز متوسط الراتب فيها 800 دولار.
طريقة استخدامها
- بعد الكلمة WHERE يمكننا وضع شروط على القيم التي سيتم تجميعها من الأساس.
- بعد الكلمة GROUP BY نضع إسم كل عمود نريد أن يتم تجميع القيم بناءاً عليه.
- بعد الكلمة HAVING يمكننا وضع شروط لفلترة النتيجة النهائية التي سيتم إرجاعها.
الشرط الذي يمكن وضعه بواسطة الجملة WHERE يتم تطبيقه قبل جلب الأسطر، أما الشرط الذي يمكن وضعه بواسطة الجملة HAVING فيتم تطبيقه على الأسطر التي تم تجميعها في النهاية و من ثم نريد فلترتها.
تجهيز قاعدة البيانات التي سنطبق عليها
قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash
و تنشئ فيها جدول إسمه employees
يحتوي على بيانات 10 موظفين.
الإستعلام
فيما يلي البيانات التي قمنا بإضافتها في الجدول employees
.
id | user | gender | country | salary |
---|---|---|---|---|
1 | rami | male | Lebanon | 700.00 |
2 | ahmad | male | Syria | 800.00 |
3 | hanan | female | KSA | 750.00 |
4 | saly | female | Lebanon | 650.00 |
5 | samir | male | Egypt | 600.00 |
6 | hamad | male | KSA | 700.00 |
7 | abdullah | male | KSA | 800.00 |
8 | rashed | male | Oman | 900.00 |
9 | majed | male | Yaman | 820.00 |
10 | malak | female | Morocco | 860.00 |
أمثلة حول وضع شروط بعد تجميع قيم الأعمدة
الإستعلام التالي يقوم بعرض متوسط الرواتب الذي يتم دفعه للموظفين من كل بلد.
ما فعلناه لإجراء هذا الإحصاء هو تجميع أسماء البلدان الموجودة في الحقل country
بواسطة الكلمة GROUP BY.
بعدها قمنا باستخدام الدالة AVG() لحساب متوسط رواتب الموظفين الموجودين في كل مجموعة منهم، أي متوسط الموظفين الذين عندهم نفس قيمة الحقل country
.
ملاحظة: في هذا الإستعلام لم نقم بفلترة النتيجة التي سترجع بل عرضناها كما هي.
المثال الأول
يمكنك إضافة أسماء للأعمدة و تغيير طريقة ظهور متوسط الرواتب كما يلي حتى تظهر النتيجة النهائية بشكل أوضح و مفهوم.
النتيجة
Country | Average Salary |
---|---|
Egypt | 600.00 |
KSA | 750.00 |
Lebanon | 675.00 |
Morocco | 860.00 |
Oman | 900.00 |
Syria | 800.00 |
Yaman | 820.00 |
الإستعلام التالي يقوم بعرض متوسط الرواتب الذي يتم دفعه للموظفين من كل بلد و الذي يتجاوز 800 دولار.
ما فعلناه لإجراء هذا الإحصاء هو تجميع أسماء البلدان الموجودة في الحقل country
بواسطة الكلمة GROUP BY.
بعدها قمنا باستخدام الدالة AVG() لحساب متوسط رواتب الموظفين الموجودين في كل مجموعة منهم، أي متوسط الموظفين الذين عندهم نفس قيمة الحقل country
.
بعدها قمنا بفلترة الأسطر المجمعة لإبقاء متوسط البلدان التي يتجاوز متوسط رواتب الموظفين فيها 800$، و فعلنا ذلك من خلال وضع شرط بواسطة الكلمة HAVING حددنا فيه أننا نريد إبقاء الأسطر التي فيها salary
أكبر من 800
.
المثال الثاني
يمكنك إضافة أسماء للأعمدة و تغيير طريقة ظهور متوسط الرواتب كما يلي حتى تظهر النتيجة النهائية بشكل أوضح و مفهوم.
النتيجة
Country | Average Salary |
---|---|
Morocco | 860.00 |
Oman | 900.00 |
Yaman | 820.00 |