هل متوسط متوسطات الأقسام يساوي متوسط رواتب الموظفين؟

متقدمقراءة دقيقةآخر تحديث 2 أكتوبر 2026

SQL قواعد البيانات

الإجابة

لا يساوي متوسط متوسطات الأقسام متوسط رواتب جميع الموظفين بالضرورة. عند حساب متوسط الأقسام، يحصل كل قسم على الوزن نفسه مهما كان عدد موظفيه. أما المتوسط العام فيعطي كل راتب معروف الوزن نفسه، ولذلك تؤثر الأقسام الأكبر بعدد أكبر من القيم في النتيجة النهائية.

مثال

SELECT SUM(salary_total) / NULLIF(SUM(salary_count), 0)
       AS overall_average
FROM (
  SELECT department,
         SUM(salary) AS salary_total,
         COUNT(salary) AS salary_count
  FROM employees
  GROUP BY department
) AS department_totals;

يجمع هذا الاستعلام مجاميع الرواتب ويقسمها على عدد الرواتب المعروفة. بذلك يحافظ على وزن كل قسم بحسب القيم التي شاركت فعليا في الحساب. استخدام عدد الموظفين كله قد يكون غير مناسب إذا كانت بعض الرواتب مفقودة.

يمكن حساب المتوسط العام مباشرة باستخدام AVG(salary) إذا كانت البيانات الأصلية متاحة. تصبح الصيغة المجمعة مفيدة عندما تعمل على ملخصات الأقسام، بشرط الاحتفاظ بالمجموع والعدد، لا بالمتوسط وحده فقط.

باختصار: لاسترجاع المتوسط العام من المجموعات، اجمع المجاميع واقسم على مجموع أعداد القيم المشاركة.

هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.

اختبر فهمك

ما قيمة avg_of_averages في الاستعلام التالي، وما المتوسط الحقيقي للرواتب الأربعة؟

CREATE TABLE employees (
  id INT PRIMARY KEY,
  department VARCHAR(10),
  salary DECIMAL(10,2)
);
INSERT INTO employees VALUES
  (1, 'A', 100),
  (2, 'B', 300), (3, 'B', 300), (4, 'B', 300);
SELECT AVG(department_average) AS avg_of_averages
FROM (
  SELECT department, AVG(salary) AS department_average
  FROM employees
  GROUP BY department
) AS department_averages;