SQLوضع شروط على الحقول التي تم تجميعها
- مفهوم وضع الشروط على الحقول التي تم تجميعها
- تجهيز قاعدة البيانات التي سنطبق عليها
- أمثلة حول وضع شروط بعد تجميع قيم الأعمدة
مفهوم وضع الشروط على الحقول التي تم تجميعها
في البداية المقصود من هذا الأمر هو وضع شروط على النتيجة التي سنحصل عليها بعد أن قمنا بتجميع الحقول و إجراء إحصاء ما.
بمعنى أخر, بعد أن تقوم بتجميع قيم الحقول بواسطة الكلمة GROUP BY يمكنك وضع شرط لفلترة النتيجة التي تم تجميعها أيضاً.
كمثال بسيط عن الحاجة لإعادة الفلترة بعد تجميع القيم, في حال كنت تريد إجراء إحصاء لمعرفة متوسط رواتب موظفي الشركة في كل بلد, و بعد معرفة متوسط الرواتب في كل بلد تريد معرفة أي بلدان تعطي موظفيها متوسط راتب يتجاوز 800 دولار.
لفلترة النتيجة التي حصلنا عليها بالأساس بعد أن قمنا بتجميع الحقول بواسطة الكلمة GROUP BY نضع الكلمة HAVING و بعدها الشرط الذي سيقوم بفلترة النتيجة أكثر.
الشكل العام لتجميع الحقول
إذا كنت ستجمع الحقول فقط و بعدها تضع الشرط الذي سيفلتر النتيجة, شكل الإستعلام سيكون كالتالي.
إذا كنت ستجمع الحقول و تضع شروط على القيم التي سيتم تجميعها من الأساس, و بعدها تنوي وضع شرط لفلترة النتيجة و في النهاية تريد ترتيب النتيجة النهائية, شكل الإستعلام سيكون كالتالي.
- مكان الكلمة
table_name
نضع إسم الجدول الذي يحتوي على الحقول التي ننوي تجميعها و إجراء إحصاء عليها. - بعد الكلمة WHERE يمكننا وضع شروط على القيم التي سيتم تجميعها من الأساس.
- بعد الكلمة HAVING يمكننا وضع شروط لفلترة النتيجة النهائية التي سيتم إرجاعها.
- بعد الكلمة GROUP BY نضع إسم كل عمود نريد أن يتم تجميع القيم بناءاً عليه.
تجهيز قاعدة البيانات التي سنطبق عليها
قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash
و تنشئ فيها جدول إسمه employees
يحتوي على بيانات 10 موظفين.
الإستعلام
بعد تنفيذ الإستعلام السابق في phpMyAdmin سيتم إنشاء قاعدة البيانات harmash
و إنشاء الجدول employees
بداخلها.
قم بالنقر على إسم قاعدة البيانات harmash
من القائمة اليسرى حتى تبدأ بالتعامل معها و تطبيق ما ستتعلمه في هذا الدرس.
البيانات التي قمنا بإضافتها بشكل إفتراضي في الجدول 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 |