تقسم عبارة PARTITION BY الصفوف إلى أقسام منطقية تعمل دالة النافذة داخل كل منها بصورة مستقلة. إذا قسمنا الموظفين بحسب القسم الإداري، يصبح لكل قسم ترتيب خاص به. وعند استخدام ROW_NUMBER() يبدأ الترقيم من واحد مجددًا عند الانتقال إلى قسم آخر.
هذا التقسيم لا يختصر مجموعة الموظفين في صف واحد، بل يحتفظ بكل صف وتضاف إليه نتيجة الحساب المناسبة لقسمه. ويمكن استخدام أكثر من عمود للتقسيم، مثل المدينة والسنة، عندما نحتاج إلى نافذة مستقلة لكل تركيب من القيمتين.
مثال
WITH employees AS (
SELECT 1 AS id, 'IT' AS department, 8000 AS salary
UNION ALL
SELECT 2, 'HR', 7000
)
SELECT id, department,
ROW_NUMBER() OVER (
PARTITION BY department
ORDER BY salary DESC, id
) AS rn
FROM employees
ORDER BY id;
يحدد PARTITION BY حدود الحساب، بينما يحدد ORDER BY ترتيب الموظفين داخل هذه الحدود. وإذا حذفنا التقسيم، تعمل الدالة على جميع صفوف النتيجة باعتبارها قسمًا واحدًا. ولا يضمن التقسيم وحده ترتيب العرض النهائي للمخرجات.
باختصار: تجعل PARTITION BY حساب النافذة مستقلًا لكل مجموعة، مع الاحتفاظ بالتفاصيل الأصلية لجميع الصفوف.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.