PARTITION BY يقسم النتائج إلى مجموعات قبل تطبيق دالة مثل RANK() أو ROW_NUMBER(). فيبدأ الحساب من جديد داخل كل مجموعة.
SELECT name, department, salary,
ROW_NUMBER() OVER (
PARTITION BY department
ORDER BY salary DESC
) AS rank_in_dept
FROM employees;
كل قسم يحصل على ترتيبه الخاص: 1، 2، 3… ثم يبدأ القسم التالي من 1 مرة أخرى.
الفرق مع GROUP BY
GROUP BY: يدمج كل مجموعة في صف واحد.PARTITION BY: يُبقي كل الصفوف، ويضيف لكل صف حسابًا ضمن مجموعته.