Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

أفضل N لكل مجموعة

جزء من قسم ما وراء الأساسيات في رحلة SQL على Coddy. الدرس 23 من 27.

«الموظف الأعلى أجرًا لكل department» هو المثال النموذجي في الكتب التعليمية. تكون الوصفة دائمًا ROW_NUMBER() مع PARTITION BY، ثم التصفية إلى الصف 1.

WITH ranked AS (
    SELECT name, department, salary,
           ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rn
    FROM employees
)
SELECT name, department, salary FROM ranked WHERE rn = 1

هل تريد أفضل 3 بدلًا من الأفضل 1؟ غيّر WHERE rn = 1 إلى WHERE rn <= 3. هل تريد السماح بالتعادلات في القمة؟ استبدل ROW_NUMBER() بـ RANK().

challenge icon

التحدي

سهل

الجداول والأعمدة المتاحة:

  • employees: id، name، department، salary

أعِد الموظف الأعلى راتبًا في كل department. أخرج name وdepartment وsalary، مرتبةً حسب department. إذا تعادل موظفان في أعلى راتب ضمن قسم ما، فأعِد موظفًا واحدًا فقط: الموظف ذو id الأقل.

جرّب بنفسك

WITH ranked AS (
    -- ROW_NUMBER() OVER (PARTITION BY department ORDER BY ...)
)
SELECT name, department, salary FROM ranked WHERE rn = 1
ORDER BY department
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس ما وراء الأساسيات

تدرّب بنفسك: Playground لـ SQL