انتقل إلى محتوى الدرس

Ranking Rows with DENSE RANK ترتيب الصفوف بدوال الترتيب

تعلّم دوال النوافذ التحليلية OVER و PARTITION BY والترتيب في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
1 صفوف تعليمية
MySQL
7 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

يوفر 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
);