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

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

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

الإجابة

الاستعلام الفرعي المترابط يستخدم قيمة من الصف الذي يعالجه الاستعلام الخارجي. عند مقارنة راتب الموظف بمتوسط رواتب قسمه، يجب أن يعرف الاستعلام الداخلي رقم قسم الموظف الحالي. يتيح هذا المرجع حساب قيمة تختلف منطقيًا من قسم إلى آخر، بدل استخدام متوسط جميع الموظفين.

تساعد الأسماء المستعارة على التمييز بين نسختين من مصدر البيانات نفسه. يمكن تسمية الموظف الخارجي e والموظفين المستخدمين في حساب المتوسط e2. عندها يربط الشرط e2.department_id = e.department_id صفوف الحساب بالقسم المطلوب، دون تقييدها بمعرّف الموظف نفسه.

مثال

WITH employees AS (
  SELECT 1 AS id, 10 AS department_id, 1000 AS salary
  UNION ALL SELECT 2, 10, 3000
)
SELECT e.id
FROM employees AS e
WHERE e.salary > (
  SELECT AVG(e2.salary)
  FROM employees AS e2
  WHERE e2.department_id = e.department_id
);

لو قارنت معرّفي الموظف بدل القسم، لحسبت متوسط راتب الموظف نفسه في هذا المخطط. ولو حذفت شرط الربط، لحصلت على المتوسط العام.

باختصار: اربط الاستعلام الفرعي برقم قسم الصف الخارجي حتى تكون المقارنة مع متوسط القسم الصحيح.

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

اختبر فهمك

أي شرط يكمل الاستعلام ليختار الموظفين الذين تتجاوز رواتبهم متوسط قسمهم؟

SELECT e.id
FROM employees AS e
WHERE e.salary > (
  SELECT AVG(e2.salary)
  FROM employees AS e2
  WHERE /* ضع الشرط هنا */
);