الـ Aggregate Functions في SQL هي دوال بتطبق على مجموعة من القيم في عمود معين عشان ترجع نتيجة واحدة بتلخص البيانات بشكل ما. يعني بدل ما نعمل استعلام لعرض كل صف على حدة، الـ Aggregate functions بتساعدنا نجمع البيانات بطريقة ملخصة.
أشهر الـ Aggregate Functions:
1. COUNT():
- وظيفتها: بتعد عدد الصفوف في عمود أو جدول.
- مثال: لو عايز تعرف عدد الموظفين في جدول
employees
:
SELECT COUNT(*) FROM employees;
- لو عايز تحسب عدد الموظفين اللي عندهم قسم معين:
SELECT COUNT(*) FROM employees WHERE department_id = 3;
Ignore Duplicates: You can ignore duplicates by using the DISTINCT
keyword in the COUNT()
function.
SELECT COUNT(DISTINCT Price)
FROM Products;
2. SUM():
- وظيفتها: بتجمع القيم في عمود معين.
- مثال: لو عايز تجمع المرتبات من جدول
employees
:
SELECT SUM(salary) FROM employees;
- لو عايز تجمع المرتبات لعدد معين من الأقسام:
SELECT SUM(salary) FROM employees WHERE department_id = 3;
How to Use SUM() with GROUP BY: A Guide with 8 Examples | LearnSQL.com
3. AVG():
- وظيفتها: بتحسب المتوسط الحسابي للقيم في عمود معين.
- مثال: لو عايز تحسب متوسط المرتبات في جدول
employees
:
SELECT AVG(salary) FROM employees;
The SQL AVG() Function Explained With Examples | LearnSQL.com
4. MIN():
- وظيفتها: بتجيب أقل قيمة في عمود معين.
- مثال: لو عايز تعرف أقل مرتب في جدول
employees
:
SELECT MIN(salary) FROM employees;
SQL MIN and MAX Functions Explained in 6 Examples | LearnSQL.com
5. MAX():
- وظيفتها: بتجيب أعلى قيمة في عمود معين.
- مثال: لو عايز تعرف أعلى مرتب في جدول
employees
:
SELECT MAX(salary) FROM employees;
6. GROUP_CONCAT()
(في بعض قواعد البيانات زي MySQL):
- وظيفتها: بتجمع القيم في عمود معين على شكل نص مفصول بفواصل.
- مثال: لو عايز تجمع أسماء الموظفين في قسم معين:
SELECT department_id, GROUP_CONCAT(name) FROM employees GROUP BY department_id;
في MS SQL فيه دالة تانية اسمها STRING_AGG()
دالة STRING_AGG()
بتدمج القيم النصية من مجموعة من الصفوف وتضعهم في صف واحد مع فصل القيم باستخدام فاصل معين (مثلاً، فاصلة، مسافة، أو أي شيء تاني).
STRING_AGG(expression, separator) [OVER (PARTITION BY column_name)]
SELECT STRING_AGG(name, ', ') AS employee_names
FROM employees;
ازاي نستخدم Aggregate Functions؟
الـ Aggregate functions بتتستخدم عادة مع الـ GROUP BY علشان تقسّم البيانات لجموع صغيرة وتقارنهم مع بعض.
يعني لو عايز تحسب متوسط المرتبات لكل قسم، هتستخدمها مع GROUP BY department_id
:
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id;
بعض الأمثلة المتقدمة:
- الـCOUNT() مع GROUP BY: لو عايز تحسب عدد الموظفين في كل قسم:
SELECT department_id, COUNT(*)
FROM employees
GROUP BY department_id;
- الـSUM() مع HAVING: لو عايز تحسب مجموع المرتبات لكل قسم وتعرض الأقسام اللي مجموع مرتباتهم أكتر من 50000:
SELECT department_id, SUM(salary)
FROM employees
GROUP BY department_id
HAVING SUM(salary) > 50000;
ملخص:
الـ Aggregate Functions هي أدوات قوية في SQL بتساعدك تلخص البيانات عن طريق حساب قيم مثل العد، المجموع، المتوسط، الحد الأقصى والحد الأدنى. غالبًا بتستخدم مع GROUP BY لتقسيم البيانات لأجزاء صغيرة وتنفيذ العمليات الحسابية عليها.