تعيد 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 من الأساسيات للاحتراف.