دالة ROW_NUMBER
جزء من قسم الأساسيات في رحلة SQL على Coddy. الدرس 57 من 72.
تنفذ الدوالي النافذية (Window functions) الحسابات عبر مجموعة من صفوف الجدول المترابطة بالصف الحالي. وعلى عكس دوال التجميع العادية، لا تقوم الدوالي النافذية بدمج النتائج في صف واحد.
وهي مفيدة بشكل خاص عندما تحتاج إلى:
- حساب الإجماليات التراكمية (running totals)
- ترتيب العناصر داخل المجموعات
- مقارنة الصفوف الحالية بالصفوف السابقة/التالية
- تحليل الاتجاهات عبر الفترات الزمنية
على سبيل المثال، إليك بعض الأمثلة الواقعية لحالات استخدام دالّات النافذة (window functions):
- تحليل المبيعات
- حساب المبيعات التراكمية حتى كل سنة (1995، 1997، 1999)
- إيجاد المنتجات الأكثر مبيعاً لكل ربع سنة
- الإحصائيات الرياضية
- تتبع عدد الميداليات الأولمبية عبر السنوات المختلفة
- تحديد الرياضيين المتصدرين في كل فترة منافسة (2000، 2004، 2008)
تُعد الدالة ROW_NUMBER() واحدة من أبسط الدوال النافذية (window functions). حيث تقوم بتعيين رقم تسلسلي فريد لـ each row في result set. وإليك كيفية استخدامها:
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` بتعليمات الترتيب والتقسيم للتحكم في كيفية عمل الترقيم.
التحدي
سهلالجداول والأعمدة المتاحة:
<strong>liquids</strong>:<strong>id</strong>,<strong>density</strong>
قم بجلب جميع السوائل التي يزيد لكثافتها (density) عن 5.677.
قم بترقيم النتيجة (استخدم الدالة ROW_NUMBER()) وسمِّ هذا العمود row_num
جرّب بنفسك
-- رقم كل صف من النتيجة المفلترة باستخدام دالة نافذة
SELECT id, density, ____ as row_num
FROM liquids
WHERE density > ____يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
2الشروط
أساسيات الشروطالكلمة المفتاحية ANDالكلمة المفتاحية ORالكلمة المفتاحية NOTدمج شروط متعددةالأقواسالقيم المنطقية Booleans8الإحصاء
دوال التجميع المدمجة - الجزء الأولدوال التجميع المدمجة - الجزء الثانيالتجميع - الجزء الأولالتجميع - الجزء الثانيالاستعلامات الفرعية - الجزء الأولالاستعلامات الفرعية - الجزء الثانيمراجعة - متجر إجمالي الأرباحمراجعة - متجر السكوترمراجعة - متجر القهوة11دوال النافذة - الجزء الأول
دالة ROW_NUMBERمعيار ORDER BYمعيار PARTITION BYPARTITION و ORDERدوال LEAD و LAGملخص - LEAD و LAGملخص - الصورملخص - الصناديق3تنسيق محدد للنتائج
قيم Nullترتيب النتائج - الجزء الأولترتيب النتائج - الجزء الثانيمراجعة - شركة للأمن السيبرانيتحديد عدد السجلاتمراجعة - مصنع مركبات6تحديات تمهيدية
مراجعة - الانتخابات البرلمانيةمراجعة - اعتقال الشرطة للمجرمينمراجعة - حاوية مشروبات البارمراجعة - هندسة أعمدة جديدة9جداول متعددة
الربط الأساسي - الجزء الأولالربط الأساسي - الجزء الثانيمراجعة - الربط (Join)الربط الذاتي (Self Join)مراجعة - الربط الذاتي (Self Join)الاتحاد (Union)تبسيط الاستعلامات، الكلمة المفتاحية WITHمراجعة - استعلامات WITHمراجعة - مقاول العقارات12Window Functions الجزء الثاني
دوال RANK و DENSE_RANKمراجعة - RANK و DENSE_RANKدالة NTILEدوال التجميعمعيار ROWS و RANGEتدرّب بنفسك: Playground لـ SQL