يتم استخدام الدالة ROW_NUMBER() في MySQL لإرجاع الملف الرقم المتسلسل لكل صف داخل القسم الخاص به. إنها نوع من وظيفة النافذة. يبدأ رقم الصف من 1 إلى عدد الصفوف الموجودة في القسم.
تجدر الإشارة إلى أن MySQL لا تدعم الدالة ROW_NUMBER() قبل الإصدار 8.0، ولكنها توفر متغير الجلسة الذي يسمح لنا بمحاكاة هذه الوظيفة.
بناء الجملة
فيما يلي بناء الجملة الأساسي لاستخدام ROW_NUMBER() فيه ماي إس كيو إل :
النمل مقابل مخضرم
ROW_NUMBER() OVER ( )
دعونا نوضح ذلك باستخدام مثال .
برنامج جافا
أولا سنقوم بإنشاء جدول بإسم ' شخص 'باستخدام العبارة أدناه:
CREATE TABLE Person ( Name varchar(45) NOT NULL, Product varchar(45) DEFAULT NULL, Country varchar(25) DEFAULT NULL, Year int NOT NULL );
بعد ذلك، يجب إضافة قيم إلى هذا الجدول. قم بتنفيذ العبارة التالية:
INSERT INTO Person(Name, Product, Country, Year) VALUES ('Stephen', 'Computer', 'USA', 2015), ('Joseph', 'Laptop', 'India', 2016), ('John', 'TV', 'USA', 2016), ('Donald', 'Laptop', 'England', 2015), ('Joseph', 'Mobile', 'India', 2015), ('Peter', 'Mouse', 'England', 2016);
بعد ذلك، قم بتنفيذ عبارة SELECT لعرض السجلات:
mysql> SELECT * FROM Person;
سوف نحصل على الناتج كما هو موضح أدناه:
الآن، يمكننا استخدام الدالة ROW_NUMBER() لتعيين رقم تسلسلي لكل سجل باستخدام العبارة أدناه:
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
سوف يعطي الإخراج التالي:
مرة أخرى، يمكننا استخدام الدالة ROW_NUMBER() لتعيين رقم تسلسلي لكل سجل داخل القسم باستخدام العبارة التالية:
4 أشهر
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
سيعطي الإخراج على النحو التالي حيث تم العثور على قسمين بناءً على العام (2015 و 2016).
سلسلة جافا العكسية
MySQL ROW_NUMBER() باستخدام متغير الجلسة
يمكننا محاكاة الدالة ROW_NUMBER() لإضافة رقم صف بترتيب متزايد باستخدام متغير الجلسة.
قم بتنفيذ العبارة التالية التي تضيف رقم الصف لكل صف، والذي يبدأ من 1:
SET @row_number = 0; SELECT Name, Product, Year, Country, (@row_number:=@row_number + 1) AS row_num FROM Person ORDER BY Country;
في هذا البيان، قمنا أولاً بتحديد متغير الجلسة @رقم الصف المشار إليه بـ @prfix وقمنا بضبط قيمته على 0. ثم قمنا باختيار البيانات من الجدول Person وقمنا بزيادة قيمة المتغير @row_number بمقدار واحد لكل صف.
بعد التنفيذ الناجح للاستعلامات، سوف نحصل على الإخراج على النحو التالي:
مرة أخرى، سنستخدم متغير الجلسة كجدول ونربطه بالجدول المصدر باستخدام العبارة التالية:
SELECT (@row_number:=@row_number + 1) AS row_num, Name, Country, Year FROM Person, (SELECT @row_number:=0) AS temp ORDER BY Year;
سوف نحصل على الناتج على النحو التالي: