الدوال التجميعية
- مفهوم الدوال التجميعية
- تجهيز قاعدة البيانات التي سنطبق عليها
- أمثلة على استخدام الدالة
MIN() - أمثلة على استخدام الدالة
MAX() - أمثلة على استخدام الدالة
AVG() - أمثلة حول استخدام الدالة
SUM() - أمثلة حول استخدام الدالة
COUNT()
مفهوم الدوال التجميعية
الدوال التجميعية ( Aggregate Functions ) عبارة عن مجموعة دوال جاهزة يمكن استخدامها لإجراء عمليات حسابية على مجموعة من القيم و النتيجة في النهاية تكون عبارة عن قيمة واحدة.
في ما يلي الدوال التجميعية الأكثر أهمية و التي يمكن استخدامها في جميع أنواع قواعد البيانات.
| الدالة |
استخدامها |
MIN() |
ترجع أصغر قيمة موجودة في العمود. |
MAX() |
ترجع أكبر قيمة موجودة في العمود. |
AVG() |
ترجع القيمة المتوسطة للقيم الموجودة في العمود. |
SUM() |
ترجع مجموع القيم الموجودة في العمود. |
COUNT() |
ترجع عدد الأسطر الموجودة في الجدول الناتج من الإستعلام. |
الدول MIN()، MAX()، AVG() و SUM() تتجاهل الحقول الفارغة التي قيمتها تساوي NULL.
تجهيز قاعدة البيانات التي سنطبق عليها
قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash و تنشئ فيها جدول إسمه employees يحتوي على بيانات 10 موظفين.
مثال
DROP DATABASE IF EXISTS harmash;
CREATE DATABASE harmash;
USE harmash;
CREATE TABLE employees (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(50),
last_name VARCHAR(20),
is_married BOOLEAN,
salary DECIMAL(7,2),
birthday Date
);
INSERT INTO employees VALUES (null, "Ahmad", "Alhazem", false, 800, "1990-10-23");
INSERT INTO employees VALUES (null, "Rami", "Algharib", false, 750, "1992-05-08");
INSERT INTO employees VALUES (null, "Said", "Alnaja", true, 900, "1988-07-12");
INSERT INTO employees VALUES (null, "Noura", "Jamali", false, 845, "1994-12-04");
INSERT INTO employees VALUES (null, "Amani", "Sarrouf", true, 1000, "1991-10-27");
INSERT INTO employees VALUES (null, "Mhamad", "Harmush", false, 700, "1993-11-12");
INSERT INTO employees VALUES (null, "Ahmad", "Asaadi", true, 850, "1995-03-10");
INSERT INTO employees VALUES (null, "Mostafa", "Shawki", true, 920, "1990-02-14");
INSERT INTO employees VALUES (null, "Jana", "Alkassem", false, 780, "1991-08-12");
INSERT INTO employees VALUES (null, "Houssam", "Zahrani", true, 880, "1985-09-20");
فيما يلي البيانات التي قمنا بإضافتها في الجدول employees.
| id | first_name | last_name | is_married | salary | birthday |
| 1 | Ahmad | Alhazem | 0 | 800.00 | 1990-10-23 |
| 2 | Rami | Algharib | 0 | 750.00 | 1992-05-08 |
| 3 | Said | Alnaja | 1 | 900.00 | 1988-07-12 |
| 4 | Noura | Jamali | 0 | 845.00 | 1994-12-04 |
| 5 | Amani | Sarrouf | 1 | 1000.00 | 1991-10-27 |
| 6 | Mhamad | Harmush | 0 | 700.00 | 1993-11-12 |
| 7 | Ahmad | Asaadi | 1 | 850.00 | 1995-03-10 |
| 8 | Mostafa | Shawki | 1 | 920.00 | 1990-02-14 |
| 9 | Jana | Alkassem | 0 | 780.00 | 1991-08-12 |
| 10 | Houssam | Zahrani | 1 | 880.00 | 1985-09-20 |
أمثلة على استخدام الدالة MIN()
الإستعلام التالي يقوم بجلب أدنى راتب يتم إعطاؤه للموظف في الشركة.
أي سنعرض أصغر قيمة موجودة في العمود salary.
الإستعلام التالي يقوم بجلب أقدم تاريخ ميلاد موضوع لموظف في الشركة.
أي سنعرض أقدم تاريخ موجود في العمود birthday.
أمثلة على استخدام الدالة MAX()
الإستعلام التالي يقوم بجلب أعلى راتب يتم إعطاؤه للموظف في الشركة.
أي سنعرض أكبر قيمة موجودة في العمود salary.
الإستعلام التالي يقوم بجلب أحدث تاريخ ميلاد موضوع لموظف في الشركة.
أي سنعرض أحدث تاريخ موجود في العمود birthday.
أمثلة على استخدام الدالة AVG()
الإستعلام التالي يقوم بعرض متوسط الرواتب التي يتم إعطاءها للموظفين في الشركة كل شهر.
ما فعلناه لحساب متوسط الرواتب هو حساب متوسط جميع الرواتب الموضوعة في العمود salary.
المثال الأول
النتيجة
| Average Salary |
| 842.500000 |
العدد يظهر فيه 6 أرقام بعد الفاصلة لأن عمليات الجمع و القسمة التي أجرتها الدالة AVG() أدت إلى إرجاع النتيجة بالنوع FLOAT.
الإستعلام التالي هو نفس الإستعلام السابق تماماً مع فرق واحد و هو أننا قمنا بتعديل شكل القيمة التي سيتم إرجاعها في النتيجة بواسطة الدالة FORMAT() حتى تظهر رقمين فقط بعد الفاصلة لتكون مشابهة للرواتب المخزنة في العمود salary.
المثال الثاني
النتيجة
| Average Salary ($) |
| 842.50 |
الإستعلام التالي يقوم بعرض متوسط الرواتب التي يتم إعطاءها للموظفين المتزوجين فقط كل شهر.
ما فعلناه لحساب متوسط رواتب المتزوجين فقط هو وضع شرط أن قيمة الحقل is_married يجب أن تساوي 1 في السطر الذي سيتم أخذ قيمة salary منه. كما أننا قمنا بتعديل شكل القيمة التي سيتم إرجاعها في النتيجة بواسطة الدالة FORMAT() حتى تظهر رقمين فقط بعد الفاصلة لتكون مشابهة للرواتب المخزنة في العمود salary.
المثال الثالث
النتيجة
| Average Salary For Married ($) |
| 910.50 |
أمثلة حول استخدام الدالة SUM()
الإستعلام التالي يقوم بعرض إجمالي الرواتب التي يتم إعطاءها للموظفين في الشركة كل شهر.
ما فعلناه لحساب إجمالي الرواتب هو حساب ناتج جمع جميع الرواتب الموضوعة في العمود salary.
المثال الأول
النتيجة
| Total Salaries ($) |
| 8425.00 |
الإستعلام التالي يقوم بعرض إجمالي الرواتب التي يتم إعطاءها للموظفين المتزوجين كل شهر.
ما فعلناه لحساب إجمالي رواتب الموظفين المتزوجين فقط هو وضع شرط أن الحقل is_married يجب أن يساوي 1 في السطر الذي سيتم أخذ قيمة salary منه.
المثال الثاني
النتيجة
| Total Salaries For Married ($) |
| 4550.00 |
أمثلة حول استخدام الدالة COUNT()
الإستعلام التالي يقوم بعرض إجمالي عدد الموظفين في الشركة.
ما فعلناه لحساب عدد الموظفين هو حساب كم رقم id يوجد في الجدول لأن هذا العمود لا يمكن أن يكون فيه حقول فارغة و هذا ما نحتاجه بالضبط هنا.
المثال الأول
يمكنك وضع الرمز * مكان الحقل id و لكن هذا الأسلوب لا ينصح به.
النتيجة
الإستعلام التالي يقوم بعرض إجمالي عدد الموظفين المتزوجين الموجودين في جدول الموظفين.
ما فعلناه لحساب عدد الموظفين المتزوجين فقط هو وضع شرط أن قيمة الحقل is_married يجب أن تساوي 1.