شرح صفوف ومحتوى الفقرة
يوفر MySQL 8 ثلاث دوال أساسية لترتيب الصفوف تمنح كل سجل رقماً تسلسلياً يبدأ من 1 وفق ترتيب جملة ORDER BY داخل النافذة، وتختلف فيما بينها في طريقة التعامل مع القيم المتعادلة:
- دالة
ROW_NUMBER: تمنح كل صف رقماً متسلسلاً فريداً (1, 2, 3, 4) حتى لو تساوت القيمتان. - دالة
RANK: تمنح القيم المتساوية نفس المركز، لكنها تقفز عن الأرقام التالية بعدد مرات التعادل (مثل1, 1, 3). - دالة
DENSE_RANK: تمنح القيم المتساوية نفس المركز مع عدم ترك أي فجوات في التسلسل الرقمي (مثل1, 1, 2, 3).
SQL
-- Compare ROW_NUMBER, RANK, and DENSE_RANK per department
SELECT
department_id, emp_name, salary,
ROW_NUMBER() OVER w AS row_num,
RANK() OVER w AS rnk,
DENSE_RANK() OVER w AS dense_rnk
FROM employees
WINDOW w AS (
PARTITION BY department_id ORDER BY salary DESC
);