Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

دالة ROW_NUMBER

جزء من قسم الأساسيات في رحلة SQL على Coddy — الدرس 57 من 72.

تُجري دوال النافذة (Window functions) حسابات عبر مجموعة من صفوف الجدول المتعلقة بالصف الحالي. وعلى عكس الدوال التجميعية العادية، لا تقوم دوال النافذة بدمج النتائج في صف واحد.

إنها مفيدة بشكل خاص عندما تحتاج إلى:

  • حساب المجاميع التراكمية
  • ترتيب العناصر داخل المجموعات
  • مقارنة الصفوف الحالية بالصفوف السابقة/التالية
  • تحليل الاتجاهات عبر الفترات الزمنية

على سبيل المثال، إليك بعض الأمثلة الواقعية لحالات استخدام دوال النافذة (window functions):

  • تحليل المبيعات
    • حساب المبيعات التراكمية حتى كل عام (1995، 1997، 1999)
    • العثور على المنتجات الأكثر مبيعاً لكل ربع سنة
  • إحصائيات رياضية
    • تتبع أعداد الميداليات الأولمبية عبر سنوات مختلفة
    • تحديد الرياضيين الرائدين في كل فترة مسابقة (2000، 2004، 2008)

تعد ROW_NUMBER() واحدة من أبسط دوال النافذة (window functions). فهي تقوم بتعيين رقم تسلسلي فريد لكل صف في مجموعة النتائج. إليك كيفية استخدامها:

SELECT column1, column2,
       ROW_NUMBER() OVER ([PARTITION BY column] [ORDER BY column]) as row_num
FROM table_name;

من الضروري استخدام جملة OVER مع ROW_NUMBER() : ROW_NUMBER() OVER ()

على سبيل المثال:

SELECT product_name, sale_date,
       ROW_NUMBER() OVER () as row_num
FROM sales;

يضيف هذا عمود row_num الذي يعد من 1 إلى إجمالي عدد الصفوف.

ملاحظة: يمكن أن تحتوي جملة OVER على تعليمات الترتيب والتقسيم للتحكم في كيفية عمل الترقيم.

challenge icon

التحدي

سهل

الجداول والأعمدة المتاحة:

  • <strong>liquids</strong>: <strong>id</strong>, <strong>density</strong>

قم بجلب جميع السوائل التي تزيد كثافتها عن 5.677.

قم بترقيم النتيجة (استخدم دالة ROW_NUMBER()) وسمِّ هذا العمود row_num

ورقة مرجعية

تقوم دوال النافذة (Window functions) بإجراء حسابات عبر مجموعة من صفوف الجدول المرتبطة بالصف الحالي دون دمج النتائج في صف واحد.

تقوم الدالة ROW_NUMBER() بتعيين رقم تسلسلي فريد لكل صف:

SELECT column1, column2,
       ROW_NUMBER() OVER ([PARTITION BY column] [ORDER BY column]) as row_num
FROM table_name;

تعتبر جملة OVER إلزامية مع ROW_NUMBER():

SELECT product_name, sale_date,
       ROW_NUMBER() OVER () as row_num
FROM sales;

جرّب بنفسك

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات