شبكة تعلم مع ناو

كيف أعرض جميع الموظفين الذين يملكون أعلى راتب في كل قسم؟

تعيد MAX(salary) أعلى قيمة راتب داخل القسم، لكنها لا تعيد تلقائيا أسماء أصحابها. للحصول على الأسماء، يمكن حساب أعلى راتب لكل قسم في نتيجة مجمعة، ثم ربطها بجدول الموظفين على القسم والراتب معا. يعيد ذلك كل موظف يطابق القيمة القصوى، بما في ذلك حالات التعادل.

مثال

SELECT e.department, e.name, e.salary
FROM employees AS e
JOIN (
  SELECT department, MAX(salary) AS max_salary
  FROM employees
  GROUP BY department
) AS m
  ON e.department = m.department
 AND e.salary = m.max_salary;

إذا كان موظفان في القسم نفسه يتقاضيان الراتب الأعلى، فسيظهر كلاهما. لا يختار هذا الحل اسما عشوائيا، ولا يفترض أن ترتيب الأسماء مرتبط بترتيب الرواتب. وهو مناسب عندما تكون أعمدة القسم والراتب غير مفقودة.

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

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

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

اختبر نفسك

خمسة أسئلة سريعة، مع الإجابة والشرح بعد كل سؤال.