وظيفة نافذة رقم صف MySQL

Mysql Row Number Window Function



في MySQL ، تحتوي طريقة ROW NUMBER () على رقم زمني لكل صف داخل القسم. إنها مجرد ميزة نافذة من نوع ما. يبدأ شكل الصفوف من 1 برقم الصفوف داخل القسم. تذكر ، قبل الإصدار 8.0 ، لا تسمح MySQL بوظيفة ROW NUMBER () ولكنها توفر متغير جلسة يساعد الشخص على محاكاة هذه الميزة. سوف نفهم المزيد عن وظيفة MySQL ROW NUMBER () خلال هذا الدليل وسننتج رقمًا متتاليًا لكل صف في مجموعة النتائج. في MySQL ، تُستخدم طرق ROW_NUMBER () مع أي من الجمل التالية:

  • سيتم استخدام عبارة Over () داخلها.
  • عبارة ORDERS BY ترتب النتيجة وفقًا لترتيب الفرز للعمود المذكور.

بناء الجملة:

>> تحديد col_nameورقم الصف()على( تقسيم حسب col_nameو ترتيب حسب col_name) كما row_num من عند اسم الطاولة؛

دعونا نفتح قذيفة عميل سطر أوامر MySQL من التطبيقات ونكتب كلمة المرور لتسجيل الدخول.









يجب عليك إنشاء جدول جديد أو استخدام الجدول الافتراضي لبدء العمل على وظيفة رقم الصف. كما هو موضح في الصورة أدناه ، لدينا جدول حيوانات في بيانات المخطط مع بعض السجلات فيه. دعنا نحضر سجلاته باستخدام تعليمة SELECT.



>> تحديد * من عند البيانات .الحيوانات؛





مثال 01: ROW_NUMBER () باستخدام عبارة ORDER BY

سنستخدم نفس الجدول لتوضيح بعض الأمثلة لوظيفة رقم الصف. نأخذ مثالاً على الدالة ROW_NUMBER () متبوعة بـ Over () ، بينما نستخدم فقط عبارة ORDER BY. لقد تم جلب جميع السجلات أثناء ترقيم الصفوف وفقًا لترتيب سعر العمود. لقد قمنا بإعطاء اسم row_num لعمود ، والذي سيخزن أرقام الصف. دعونا نجرب الأمر أدناه للقيام بذلك.

>> تحديد *ورقم الصف()على( ترتيب حسب سعر) كما row_num من عند البيانات .الحيوانات؛

عند تنفيذ الاستعلام أعلاه ، يمكننا أن نرى أنه تم تخصيص الصفوف بأرقام وفقًا لترتيب الفرز الخاص بعمود السعر. قد تعتقد أن بعض الأسعار الأصغر يجب أن تكون في أعلى العمود ويجب فرزها وفقًا لذلك. لكن عبارة ORDER BY لا ترى سوى الرقم الأول أو الأبجدية الأولى من العمود لفرز القيم.



دعنا ننفذ نفس الاستعلام متبوعًا بعبارة ORDER BY أثناء استخدام ترتيب الفرز للعمود Age. سيتم إعطاء الإخراج وفقًا للعمود العمر.

>> تحديد *ورقم الصف()على( ترتيب حسب سن) كما row_num من عند البيانات .الحيوانات؛

المثال 02: ROW_NUMBER () باستخدام جزء من جملة

سنستخدم عبارة PARTITION BY الوحيدة في استعلام ROW_NUMBER () للتحقق من النتائج. لقد استخدمنا استعلام التحديد لجلب السجلات متبوعًا بـ ROW_NUMBER () وعبارة OVER ، أثناء تقسيم الجدول وفقًا للعمود Color. نفّذ الأمر المُلحق أدناه في غلاف الأمر.

>> تحديد *ورقم الصف()على( تقسيم حسب اللون) كما row_num من عند البيانات .الحيوانات؛

يمكنك أن ترى في النتيجة أنه تم تعيين ترقيم الصفوف في أقسام ، وفقًا لترتيب فرز الألوان. نظرًا لأن لدينا 4 قيم للون أسود يأخذ 4 صفوف. لهذا السبب حصلت على أرقام من أربعة صفوف تبدأ من 1 إلى 4 والعكس صحيح.

جرب نفس المثال ، مقسمًا حسب العمود 'الجنس' هذه المرة. كما نعلم ، لدينا جنسان فقط في هذا الجدول ، ولهذا السبب سيتم تشكيل قسمين. تحتل الإناث 9 صفوف ، وهذا هو سبب ترقيم الصفوف من 1 إلى 9. بينما الذكور لديهم 8 قيم ، ولهذا السبب لديها 1 إلى 8.

>> تحديد *ورقم الصف()على( تقسيم حسب الجنس) كما row_num من عند البيانات .الحيوانات؛

مثال 03: ROW_NUMBER () باستخدام PARTITION BY & ORDER BY

لقد قمنا بعمل المثالين أعلاه في سطر أوامر MySQL ، والآن حان الوقت للقيام بمثال ROW_NUMBER () في MySQL Workbench 8.0. لذلك ، افتح MySQL Workbench 8.0 من التطبيقات. قم بتوصيل MySQL Workbench بقاعدة بيانات جذر المضيف المحلي لبدء العمل.

على الجانب الأيسر من MySQL Workbench ، ستجد شريط المخطط ، ينفخ الملاح. في شريط المخطط هذا ، ستجد قائمة قواعد البيانات. ضمن قائمة قواعد البيانات ، سيكون لديك جداول مختلفة وإجراءات مخزنة ، كما ترون في الصورة أدناه. لدينا جداول مختلفة في 'بيانات' قاعدة بياناتنا. سنفتح الجدول 'order1' باستخدام الأمر SELECT في منطقة الاستعلام لبدء استخدامه لتنفيذ وظيفة ROW_NUMBER ().

>> تحديد * من عند البيانات . Order1؛

تم عرض ترتيب الجدول 1 في عرض الشبكة كما هو موضح أدناه. يمكنك أن ترى أنه يحتوي على 4 حقول أعمدة ، المعرف ، المنطقة ، الحالة ، ورقم الطلب. سنقوم بإحضار جميع سجلات هذا الجدول أثناء استخدام عبارة ORDER BY و PARTITION BY ، وكلاهما في نفس الوقت.

في منطقة الاستعلام في MySQL Workbench 8.0 ، اكتب الاستعلام المعروض أدناه. بدأ الاستعلام بعبارة SELECT ، وجلب جميع السجلات متبوعة بوظيفة ROW_NUMBER () جنبًا إلى جنب مع جملة OVER. بعد عبارة OVER ، حددنا عمود الحالة الذي تتابعته عبارة PARTITION BY لتقسيم الجدول إلى أقسام وفقًا لهذا الجدول. تم استخدام عبارة ORDER BY لترتيب الجدول تنازليًا وفقًا لعمود المنطقة. سيتم الاحتفاظ بأرقام الصفوف في العمود row_num. اضغط على أيقونة الفلاش لتنفيذ هذا الأمر.

سيتم عرض النتيجة المعروضة أدناه. بادئ ذي بدء ، تم فصل الجدول إلى جزأين وفقًا لقيم العمود الحالة. بعد ذلك ، تم تقديمه بالترتيب التنازلي للعمود 'المنطقة' وتم تخصيص الأقسام بأرقام الصفوف.

استنتاج:

أخيرًا ، أكملنا جميع الأمثلة الضرورية في استخدام الدالة ROW_NUMBER () في MySQL Workbench و MySQL Command-line Client Shell.