SQLتجميع قيم الحقول المشتركة
- مفهوم التجميع
- تجهيز قاعدة البيانات التي سنطبق عليها
- أمثلة حول تجميع قيم الأعمدة
مفهوم التجميع
تجميع قيم الحقول المشتركة هو أمر مفيد جداً و يستخدم لإجراء إحصاءات على القيم المخزنة في الجداول.
فمثلاً لمعرفة كم مستخدم يوجد من كل بلد, يتم تجميع أسماء البلدان و من ثم حساب عدد المستخدمين المسجلين من كل بلد.
و هنا طبعاً نقوم بحساب عدد المستخدمين في كل بلد من خلال إسم البلد المسجل عند كل مستخدم.
لتحديد العمود الذي سيتم على أساسه تجميع قيم عمود آخر, نحدد العمود الأساسي باستخدام الكلمة GROUP BY.
بعد تجميع القيم تصبح قادر على استخدام الدوال COUNT() - MAX() - MIN() - SUM() - AVG() معهم.
في هذا الدرس سنتعلم كيف نجمّع قيم الحقول المشتركة و نجري عليها إحصاءات كما نرى في البرامج و المواقع التي نستخدمها في حياتنا اليومية.
الشكل العام لتجميع الحقول
إذا كنت ستجمع الحقول فقط, شكل الإستعلام سيكون كالتالي.
إذا كنت ستجمع الحقول و تضع شروط على القيم التي سيتم تجميعها و ترتب النتيجة النهائية, شكل الإستعلام سيكون كالتالي.
- مكان الكلمة
table_name
نضع إسم الجدول الذي يحتوي على الحقول التي ننوي تجميعها و إجراء إحصاء عليها. - مكان الكلمة
condition
يمكننا وضع شروط على القيم التي سيتم تجميعها من الأساس. - بعد الكلمة 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 و وضعنا بعدها الحقل country
للإشارة إلى أننا نريد تجميعهم نسبةً لأسماء البلدان المشتركة.
ملاحظة: في هذا المثال بالتحديد كان من الأفضل و الأسهل إستخدام الكلمة DISTINCT بدلاً منها لأنها ستعطينا نفس النتيجة و لكن هدفنا الآن تعليمك كيف تستخدم GROUP BY خطوة خطوة لهذا وضعنا هذا المثال البسيط.
الإستعلام
في حال كنت تريد فقط الحصول على أسماء البلدان بدون إجراء أي إحصاء, فيمكنك أيضاً كتابة الإستعلام كالتالي كما رأينا في الدروس السابقة.
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
نلاحظ أنه عند تجميع أسماء البلدان لا يتم وضع إسم البلد أكثر من مرة في حال كان مكرراً في الجدول.
country |
---|
Egypt |
KSA |
Lebanon |
Morocco |
Oman |
Syria |
Yaman |
المثال الثاني
الإستعلام التالي يقوم بحساب كم موظف موجود في كل بلد مذكور في جدول الموظفين.
ما فعلناه لإجراء هذا الإحصاء هو تجميع أسماء البلدان الموجودة في الحقل country
بواسطة الكلمة GROUP BY.
بعدها قمنا باستخدام الدالة COUNT() لحساب عدد الموظفين الموجودين في كل مجموعة, أي الموظفين الذين عندهم نفس قيمة الحقل country
.
الإستعلام
الإستعلام التالي هو ما يجب كتابته بالضبط للحصول على الإحصاء المطلوب.
نفس الإستعلام السابق و لكننا قمنا بتغيير أسماء الأعمدة حتى تظهر النتيجة النهائية بشكل أوضح و مفهوم.
سنحصل على النتيجة التالية عند تنفيذ الإستعلام الذي غيّرنا أسماء أعمدته.
لاحظ أنه يوجد ثلاث موظفين من KSA
و إثنين من Lebanon
و باقي الدول يوجد واحد فيها.
Country | Number of Employees |
---|---|
Egypt | 1 |
KSA | 3 |
Lebanon | 2 |
Morocco | 1 |
Oman | 1 |
Syria | 1 |
Yaman | 1 |
المثال الثالث
الإستعلام التالي يقوم بحساب عدد الموظفين الذكور و الإناث الموجودين في الشركة.
ما فعلناه لإجراء هذا الإحصاء هو تجميع جنس الموظفين الموجود في الحقل gender
بواسطة الكلمة GROUP BY.
بعدها قمنا باستخدام الدالة COUNT() لحساب عدد الموظفين الموجودين في كل مجموعة, أي عدد الموظفين الذين عندهم نفس قيمة الحقل gender
.
الإستعلام
الإستعلام التالي هو ما يجب كتابته بالضبط للحصول على الإحصاء المطلوب.
نفس الإستعلام السابق و لكننا قمنا بتغيير أسماء الأعمدة حتى تظهر النتيجة النهائية بشكل أوضح و مفهوم.
سنحصل على النتيجة التالية عند تنفيذ الإستعلام الذي غيّرنا أسماء أعمدته.
Gender | Number of Employees |
---|---|
female | 3 |
male | 7 |
المثال الرابع
الإستعلام التالي يقوم بحساب متوسط الرواتب الذي يتم دفعه للموظفين من كل بلد.
ما فعلناه لإجراء هذا الإحصاء هو تجميع أسماء البلدان الموجودة في الحقل 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 |
المثال الخامس
الإستعلام التالي يقوم بحساب كم موظف موجود من كل بلد بالإضافة إلى مجموع الراتب الذي يتم إعطاؤه لهم.
ما فعلناه لإجراء هذا الإحصاء هو تجميع أسماء البلدان الموجودة في الحقل country
بواسطة الكلمة GROUP BY.
بعدها قمنا باستخدام الدالة COUNT() لحساب عدد الموظفين الموجودين في كل مجموعة و الدالة SUM() لحساب مجموع الرواتب التي يتم إعطاءها لكل مجموعة, أي الموظفين الذين عندهم نفس قيمة الحقل country
سيتم حساب عددهم مجموع مرتبهم بشكل خاص.
الإستعلام
الإستعلام التالي هو ما يجب كتابته بالضبط للحصول على الإحصاء المطلوب.
نفس الإستعلام السابق و لكننا قمنا بتغيير أسماء الأعمدة حتى تظهر النتيجة النهائية بشكل أوضح و مفهوم.
سنحصل على النتيجة التالية عند تنفيذ الإستعلام الذي غيّرنا أسماء أعمدته.
Country | Number of Employees | Total Salary |
---|---|---|
Egypt | 1 | 600.00 |
KSA | 3 | 2250.00 |
Lebanon | 2 | 1350.00 |
Morocco | 1 | 860.00 |
Oman | 1 | 900.00 |
Syria | 1 | 800.00 |
Yaman | 1 | 820.00 |
المثال السادس
الإستعلام التالي يقوم بتجميع الموظفين مرتين قبل إجراء الإحصاء على النحو التالي:
- أول مرة يجمع الموظفين على حسب بلدانهم.
- ثاني مرة يجمع الموظفين المنتمين لنفس البلد على حسب جنسهم.
بعدها يقوم بحساب عدد الموظفين في كل بلد و حسب جنسهم.
ما فعلناه لإجراء هذا الإحصاء هو تجميع أسماء البلدان الموجودة في الحقل country
و أسماء الأجناس المذكورة في الحقل gender
بواسطة الكلمة GROUP BY.
بعدها قمنا باستخدام الدالة COUNT() لحساب عدد الموظفين الموجودين في نفس البلد و الذين عندهم نفس الجنس, أي الموظفين الذين عندهم نفس قيمة الحقل country
و نفس قيمة الحقل gender
سيتم حساب عددهم بشكل خاص.
الإستعلام
الإستعلام التالي هو ما يجب كتابته بالضبط للحصول على الإحصاء المطلوب.
نفس الإستعلام السابق و لكننا قمنا بتغيير أسماء الأعمدة حتى تظهر النتيجة النهائية بشكل أوضح و مفهوم.
سنحصل على النتيجة التالية عند تنفيذ الإستعلام الذي غيّرنا أسماء أعمدته.
لاحظ أنه في حال كان يوجد بلد فيه موظفين ذكور و إناث فإن إسم البلد يظهر مرتين حتى يفصل لك عدد الذكور عن عدد الإناث.
Country | Gender | Number of Employees |
---|---|---|
Egypt | male | 1 |
KSA | female | 1 |
KSA | male | 2 |
Lebanon | female | 1 |
Lebanon | male | 1 |
Morocco | female | 1 |
Oman | male | 1 |
Syria | male | 1 |
Yaman | male | 1 |
النتيجة التي حصلنا عليها نقرأها كالتالي:
- هناك موظف واحد من
Egypt
- هناك ثلاث موظفين من
KSA
إثنين ذكور و أنثى واحدة. - هناك موظفَين من
Lebanon
و هما ذكر واحد و أنثى واحدة. - هناك موظفة واحدة من
Morocco
- هناك موظف واحد من
Oman
- هناك موظف واحد من
Syria
- هناك موظف واحد من
Yaman
المثال السابع
الإستعلام التالي يقوم بحساب عدد الموظفين الذكور فقط في كل بلد مذكور في الجدول.
ما فعلناه لإجراء هذا الإحصاء تحديد أن قيمة gender
يجب أن تكون 'male'
في أي سطر سيتم جلب إسم البلد منه.
بعدها قمنا بتجميع أسماء البلدان الموجودة في الحقل country
بواسطة الكلمة GROUP BY.
في النهاية قمنا باستخدام الدالة COUNT() لحساب عدد الموظفين الموجودين في كل مجموعة, أي الموظفين الذين عندهم نفس قيمة الحقل country
و عندهم gender
يساوي 'male'
.
الإستعلام
الإستعلام التالي هو ما يجب كتابته بالضبط للحصول على الإحصاء المطلوب.
نفس الإستعلام السابق و لكننا قمنا بتغيير أسماء الأعمدة حتى تظهر النتيجة النهائية بشكل أوضح و مفهوم.
سنحصل على النتيجة التالية عند تنفيذ الإستعلام الذي غيّرنا أسماء أعمدته.
لاحظ أنه يوجد ثلاث موظفين من KSA
و إثنين من Lebanon
و باقي الدول يوجد واحد فيها.
Country | Number of Male Employees |
---|---|
Egypt | 1 |
KSA | 2 |
Lebanon | 1 |
Oman | 1 |
Syria | 1 |
Yaman | 1 |