تحسين الاستعلامات باستخدام التجميعات (Aggregations) والدوال التحليلية (Analytical Functions) في SQL
ما هي التجميعات (Aggregations) في SQL؟
التجميعات في SQL هي دوال تُستخدم لإجراء عمليات حسابية على مجموعة من الصفوف وإرجاع قيمة واحدة كنتيجة. تُستخدم التجميعات بشكل واسع في تحليلات البيانات لإنشاء تقارير إحصائية، تلخيص البيانات، واستخراج القيم الإجمالية. تشمل الدوال التجميعية الشائعة: SUM
، COUNT
، AVG
، MIN
، وMAX
.
استخدام الدوال التجميعية في SQL
الدوال التجميعية تُستخدم مع عبارة GROUP BY
لتجميع البيانات بناءً على عمود أو أكثر. تعمل GROUP BY
على تقسيم الصفوف إلى مجموعات، ثم تطبيق الدوال التجميعية على هذه المجموعات لإرجاع النتائج الملخصة.
مثال على استخدام GROUP BY ودالة SUM
SELECT department_id, SUM(salary) AS total_salary
FROM employees
GROUP BY department_id;
في هذا المثال، يتم استخدام دالة SUM
لحساب مجموع الرواتب لكل قسم باستخدام عمود department_id
. يتم تقسيم البيانات أولاً باستخدام GROUP BY
، ثم تطبيق SUM
على كل مجموعة.
مثال على استخدام دالة COUNT
SELECT department_id, COUNT(employee_id) AS num_employees
FROM employees
GROUP BY department_id;
في هذا المثال، يتم استخدام دالة COUNT
لحساب عدد الموظفين في كل قسم. يتم تقسيم البيانات أولاً باستخدام GROUP BY
، ثم تطبيق COUNT
على كل مجموعة.
الدوال التحليلية (Analytical Functions) في SQL
الدوال التحليلية (Analytical Functions) تُستخدم لتنفيذ العمليات الحسابية على مجموعة من الصفوف، لكنها تختلف عن الدوال التجميعية في أنها تحتفظ بكل صفوف الجدول الأصلي. يمكن استخدام الدوال التحليلية مع العبارات OVER
وPARTITION BY
لتقسيم البيانات وتحليلها بطرق متقدمة.
دالة RANK
تُستخدم دالة RANK
لتحديد ترتيب الصفوف بناءً على قيمة معينة. تقوم هذه الدالة بإرجاع ترتيب كل صف ضمن مجموعة معينة من الصفوف.
مثال على استخدام دالة RANK
SELECT employee_name, salary,
RANK() OVER (ORDER BY salary DESC) AS salary_rank
FROM employees;
في هذا المثال، يتم استخدام دالة RANK
لتحديد ترتيب الرواتب لكل موظف. يتم ترتيب الصفوف بناءً على قيمة العمود salary
بشكل تنازلي، ثم إرجاع رتبة كل موظف.
دالة ROW_NUMBER
تُستخدم دالة ROW_NUMBER
لتحديد رقم الصف ضمن مجموعة معينة من الصفوف. تُعد هذه الدالة مفيدة عند الحاجة إلى ترقيم الصفوف في استعلام معين.
مثال على استخدام دالة ROW_NUMBER
SELECT employee_name, salary,
ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) AS row_num
FROM employees;
في هذا المثال، يتم استخدام دالة ROW_NUMBER
لتحديد رقم الصف لكل موظف ضمن كل قسم. يتم تقسيم الصفوف باستخدام PARTITION BY
بناءً على عمود department_id
، ثم ترقيم الصفوف بناءً على الرواتب بشكل تنازلي داخل كل قسم.
دالة LAG
تُستخدم دالة LAG
لاسترجاع قيمة العمود من الصف السابق ضمن نفس المجموعة. تُعد هذه الدالة مفيدة لتحليل البيانات عبر الصفوف المتتالية.
مثال على استخدام دالة LAG
SELECT employee_name, salary,
LAG(salary, 1, 0) OVER (ORDER BY salary DESC) AS prev_salary
FROM employees;
في هذا المثال، يتم استخدام دالة LAG
لاسترجاع قيمة راتب الموظف السابق لكل موظف. يتم ترتيب الصفوف بناءً على العمود salary
، ويتم استرجاع الراتب السابق لكل موظف.
تحليل البيانات باستخدام التجميعات والدوال التحليلية
يمكن استخدام التجميعات والدوال التحليلية لتحليل البيانات بطرق معقدة وإنشاء تقارير متقدمة. على سبيل المثال، يمكن استخدام الدوال التحليلية لعرض التغيرات في القيم، تحديد الاتجاهات (Trends)، أو مقارنة القيم الحالية بالقيم السابقة.
مثال على استخدام التجميعات والدوال التحليلية معًا
SELECT department_id, SUM(salary) AS total_salary,
RANK() OVER (ORDER BY SUM(salary) DESC) AS department_rank
FROM employees
GROUP BY department_id;
في هذا المثال، يتم استخدام دالة SUM
لحساب مجموع الرواتب لكل قسم، ثم يتم استخدام دالة RANK
لتحديد ترتيب الأقسام بناءً على مجموع الرواتب.
نصائح لاستخدام التجميعات والدوال التحليلية بكفاءة
لتحقيق أقصى استفادة من التجميعات والدوال التحليلية، يُنصح بما يلي:
- استخدام الفهارس على الأعمدة المستخدمة في
GROUP BY
وORDER BY
لتحسين الأداء. - تحليل خطة التنفيذ (Execution Plan) للتأكد من أن الاستعلام يتم تنفيذه بكفاءة.
- تقليل استخدام الدوال التحليلية في الاستعلامات المعقدة لتجنب زيادة زمن التنفيذ.
خاتمة
في هذا الدرس، تعرفنا على كيفية استخدام التجميعات والدوال التحليلية لتحسين استعلامات SQL. تعلمنا كيفية استخدام GROUP BY
، SUM
، COUNT
، والدوال التحليلية مثل RANK
و ROW_NUMBER
. سنكمل في الدروس القادمة استكشاف المزيد من الأدوات والتقنيات لتحليل البيانات بشكل متقدم باستخدام SQL.
إذا وجدت هذا الدرس مفيدًا، لا تتردد في ترك تعليق أو مشاركة الدرس مع أصدقائك على وسائل التواصل الاجتماعي لمساعدتهم أيضًا على تعلم التحليل المتقدم للبيانات باستخدام SQL!
اترك تعليقاً