ROW_NUMBER وRANK وDENSE_RANK
رقّم الصفوف ورتّبها داخل الأقسام، واختر دالة الترتيب المناسبة عند وجود تعادلات.
ROW_NUMBER وRANK وDENSE_RANK درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
دوال الترقيم الثلاث
ثلاث دوال نافذة ترقّم الصفوف داخل التقسيم:
ROW_NUMBER()— 1، 2، 3، 4 (فريدة دائمًا)RANK()— 1، 2، 2، 4 (تشترك القيم المتساوية، ثم تُتخطى الأرقام)DENSE_RANK()— 1، 2، 2، 3 (تشترك القيم المتساوية، من دون تخطّي أرقام)
ROW_NUMBER
يُسنِد 1 و2 و3 داخل كل تقسيم. تُكسر حالات التعادل بشكل عشوائي — لذلك وفّر معيارًا لكسر التعادل في ORDER BY لضمان حتمية النتيجة:
SELECT id, user_id, total,
ROW_NUMBER() OVER (
PARTITION BY user_id ORDER BY total DESC, id
) AS rn
FROM orders;أعلى N لكل مجموعة
الاستخدام التقليدي لـ ROW_NUMBER:
WITH ranked AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY user_id ORDER BY total DESC
) AS rn
FROM orders
)
SELECT * FROM ranked WHERE rn <= 3;
-- Each user's top 3 orders.RANK
تحصل الصفوف ذات قيمة ORDER BY نفسها على الترتيب نفسه؛ وتتجاوز القيمة المختلفة التالية الفجوة:
-- totals: 100, 90, 90, 70
-- RANK: 1, 2, 2, 4 (skipped 3)
SELECT id, total,
RANK() OVER (ORDER BY total DESC) AS rk
FROM orders;DENSE_RANK
مثل RANK، لكن من دون فجوات:
-- totals: 100, 90, 90, 70
-- DENSE: 1, 2, 2, 3
SELECT id, total,
DENSE_RANK() OVER (ORDER BY total DESC) AS dr
FROM orders;الاختيار بينها
- هل تحتاج إلى أرقام فريدة (مثل ترقيم الصفحات)؟
ROW_NUMBER - هل تريد ترتيبًا مع «تخطّي الأرقام عند التعادل» بالطريقة التقليدية؟
RANK - هل تريد ترتيبًا مع «اشتراك القيم المتساوية، والرقم التالي هو التالي مباشرةً»؟
DENSE_RANK
NTILE: حاويات N-كمية
توزّع NTILE(n) الصفوف على n حاويات متساوية تقريبًا:
SELECT id, total,
NTILE(4) OVER (ORDER BY total) AS quartile
FROM orders;
-- 1 = bottom 25%, 4 = top 25%إزالة الصفوف المكررة
استخدم ROW_NUMBER مع DELETE للاحتفاظ بصف واحد لكل مجموعة مكررة:
WITH dups AS (
SELECT id,
ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS rn
FROM users
)
DELETE FROM users WHERE id IN (SELECT id FROM dups WHERE rn > 1);ترقيم الصفحات لكل مجموعة
الصفحة 2 من «طلبات كل مستخدم، 5 طلبات في الصفحة»:
WITH r AS (
SELECT id, user_id,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_at DESC) AS rn
FROM orders
)
SELECT * FROM r WHERE rn BETWEEN 6 AND 10;PERCENT_RANK وCUME_DIST
الموضع النسبي داخل التقسيم:
SELECT id, total,
PERCENT_RANK() OVER (ORDER BY total) AS pct_rank,
CUME_DIST() OVER (ORDER BY total) AS cume_dist
FROM orders;الأداء
تحتاج دوال الترقيم إلى إدخال مرتب داخل كل تقسيم. ويمكن لفهرس على (partition_col, order_col) أن يتجنب خطوة الفرز.
مراجعة
تغطي دوال الترقيم الثلاث معظم الاحتياجات.
- ROW_NUMBER لتحقيق التفرد
- RANK / DENSE_RANK للترتيب مع حالات التعادل
- NTILE لحاويات الكميات
تحقق سريع
بالنظر إلى الإجماليات 100 و90 و90 و70، ما الناتج الذي يُنتجه DENSE_RANK؟
تعلم SQL مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 46
- الدروس
- 183
الأسئلة الشائعة
هل درس «ROW_NUMBER وRANK وDENSE_RANK» مجاني؟
نعم — نص درس «ROW_NUMBER وRANK وDENSE_RANK» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «ROW_NUMBER وRANK وDENSE_RANK»؟
رقّم الصفوف ورتّبها داخل الأقسام، واختر دالة الترتيب المناسبة عند وجود تعادلات. تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «ROW_NUMBER وRANK وDENSE_RANK»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- OVER وPARTITION BY وORDER BY
- ROW_NUMBER وRANK وDENSE_RANK
- LAG وLEAD وأنماط السلاسل الزمنية
- المجاميع التراكمية والمتوسطات المتحركة