📊 دوال التجميع في SQL: تحليل بياناتك بذكاء!

مرحباً بك في درس جديد من سلسلة تعلم SQL! اليوم سنتعلم واحدة من أهم الميزات في قواعد البيانات - دوال التجميع 🎯. هذه الدوال تساعدنا على إجراء عمليات حسابية على مجموعات من السجلات واستخراج معلومات قيمة من البيانات.


ما هي دوال التجميع؟ 🤔

دوال التجميع (Aggregate Functions) هي دوال خاصة في SQL تقوم بإجراء عمليات حسابية على مجموعة من القائد وتعيد نتيجة واحدة. تخيل أن لديك جدولاً به آلاف المنتجات، وتريد معرفة متوسط سعرها أو عددها الكلي - هذه الدوال هي الحل!

أشهر دوال التجميع:

  • COUNT(): تعد عدد السجلات
  • SUM(): تجمع القيم الرقمية
  • AVG(): تحسب المتوسط الحسابي
  • MAX(): تعيد أعلى قيمة
  • MIN(): تعيد أقل قيمة

🔢 دالة COUNT - عد السجلات بسهولة

دالة COUNT() تستخدم لحساب عدد السجلات في عمود معين أو في الجدول كله.

مثال بسيط:

-- حساب عدد جميع الموظفين في الشركة
SELECT COUNT(*) AS total_employees
FROM employees;
-- حساب عدد الموظفين في قسم المبيعات فقط
SELECT COUNT(*) AS sales_employees
FROM employees
WHERE department = 'Sales';

➕ دالة SUM - جمع القيم الرقمية

دالة SUM() تجمع كل القيم في عمود رقمي معين.

مثال عملي:

-- حساب إجمالي المبيعات الشهرية
SELECT SUM(sales_amount) AS total_sales
FROM sales
WHERE month = 'January';

📈 دالة AVG - حساب المتوسط الحسابي

دالة AVG() تحسب متوسط القيم في عمود رقمي.

مثال تطبيقي:

-- حساب متوسط رواتب الموظفين
SELECT AVG(salary) AS average_salary
FROM employees;

⬆️⬇️ دالتا MAX و MIN - القيم القصوى والدنيا

هاتان الدالتان تساعدان في إيجاد أعلى وأقل قيمة في عمود.

أمثلة توضيحية:

-- أعلى راتب في الشركة
SELECT MAX(salary) AS highest_salary
FROM employees;
-- أقل سعر لمنتج
SELECT MIN(price) AS lowest_price
FROM products;

🎯 نصائح مهمة عند استخدام دوال التجميع

  1. تجاهل القيم NULL: معظم دوال التجميع تتجاهل القيم الفارغة تلقائياً
  2. استخدام Aliases: استخدم أسماء مستعارة (AS) لجعل النتائج أكثر وضوحاً
  3. الجمع مع WHERE: يمكنك استخدام دوال التجميع مع شروط WHERE للتصفية

💡 مثال شامل يجمع كل الدوال

SELECT 
    COUNT(*) AS total_orders,
    SUM(total_amount) AS total_revenue,
    AVG(total_amount) AS average_order,
    MAX(total_amount) AS largest_order,
    MIN(total_amount) AS smallest_order
FROM orders
WHERE order_date >= '2024-01-01';