מספר שורה הוא הנפוץ ביותר פונקציית דירוג בשימוש ב-SQL Server. הפונקציה ROW_NUMBER(). יוצר מספר רציף עבור כל שורה בתוך מחיצה בפלט שנוצר. בכל מחיצה, מספר השורה הראשונה מתחיל ב-1. עלינו להשתמש תמיד ב- מיין לפי סעיף כדי להבטיח שהמספרים מוקצים ברצף המתאים. הערכים המוחזרים על ידי פונקציה זו הם של BIG INT סוג מידע. פונקציה זו מגיעה עם SQL Server 2005 וגירסאות מאוחרות יותר של MS SQL.
ה-ROW_NUMBER קובע את ערך זמני כאשר השאילתה מבוצעת. אם אתה רוצה לקבל את המספרים בטבלה, אתה צריך לראות את זהות רכוש ו סדר פעולות . כאשר הפונקציה ROW_NUMBER ב-SQL Server נתקלת בשני ערכים זהים באותה מחיצה, היא מקצה להם מספרי דירוג שונים. מספר הדרגה ייקבע לפי סדר הצגתן.
אין ערובה שהערך המוחזר על ידי פונקציה זו יוסדר זהה עבור כל ביצוע, אלא אם כן הדברים הבאים נכונים:
- ערכי עמודות מחולקות הם ייחודיים
- ערכי עמודות ORDER BY הם ייחודיים
- שילוב של עמודות Partition ו- Order By הם ייחודיים
תחביר
להלן התחביר הממחיש את הפונקציה ROW_NUMBER():
ROW_NUMBER() OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ... )
הבה נבין את התחביר של הפונקציה ROW NUMBER():
על
חשוב להבין את הסעיף הזה שמציין את החלון או את קבוצת השורות שפונקציית החלון מפעילה. PARTITION BY ו-ORDER BY הם שני הסעיפים האפשריים של סעיף OVER. הביטוי ORDER BY של משפט ה-OVER נתמך כאשר השורות חייבות להגיע בסדר מסוים כדי שהפונקציה תבוצע.
חלוקה לפי
- זהו סעיף אופציונלי שמחלק את ערכת התוצאות למחיצות (קבוצות של שורות). לאחר מכן מופעלת הפונקציה ROW NUMBER() על כל מחיצה ומקצה את מספר הדרגה של כל מחיצה בנפרד.
- אם נשמיט את המחיצה לפי סעיף, הפונקציה ROW_NUMBER תתייחס לכל התוצאה כמחיצה בודדת ותספק דירוג מהסדר העליון למטה.
מיין לפי
סעיף זה מאפשר לנו למיין את השורות של ערכת התוצאות בתוך כל מחיצה. זהו משפט נדרש מכיוון שהפונקציה ROW_NUMBER() תלויה בהזמנה.
דוגמא
הבה נבין כיצד פועלת הפונקציה ROW_NUMBER בטבלת SQL Server עם דוגמה. ראשית, ניצור טבלה בשם ' אנשים ' באמצעות ההצהרה שלהלן:
CREATE TABLE Persons ( person_name varchar(45) NOT NULL, product varchar(45) DEFAULT NULL, country varchar(25) DEFAULT NULL, price float, years int NOT NULL );
לאחר מכן, נוסיף כמה רשומות לטבלה זו באמצעות ההצהרה שלהלן:
INSERT INTO Persons (person_name, product, country, price, years) VALUES ('Steffen', 'Computer', 'USA', 20000.00, 2018), ('Joseph', 'Laptop', 'India', 35000.00, 2016), ('Kevin', 'TV', 'USA', 15000.00, 2016), ('Thompson', 'Mobile', 'France', 12500.00, 2017), ('Donald', 'Laptop', 'England', 30000.00, 2018), ('Joseph', 'Mobile', 'India', 18000.00, 2018), ('Matthew', 'Desktop', 'France', 22000.00, 2017), ('Antonio', 'Mouse', 'England', 1200.00, 2016);
לאחר מכן, אמת את הנתונים באמצעות ה- בחר הַצהָרָה. נקבל את הפלט שלהלן:
1. דוגמה פשוטה של ROW_NUMBER().
ההצהרה הבאה מציג את הפרטים של האדם ומוסיף מספר שלם רציף לכל שורה באמצעות ROW_NUMBER():
SELECT *, ROW_NUMBER() OVER (ORDER BY price) AS row_num FROM Persons;
כאן, לא ציינו את הסעיף PARTITION BY כך שהפונקציה ROW_NUMBER() תתייחס לכל ערכת התוצאה כמחיצה בודדת. לאחר ביצוע ההצהרה, נקבל את הפלט הבא:
2. דוגמה ROW_NUMBER() מעל מחיצות
הפונקציה ROW NUMBER() משמשת בדוגמה זו מספקת מספר רציף לכל רשומה בתוך מחיצה בטבלה. זה תמיד אתחול מחדש את מספר השורה כשהשנה משתנה:
SELECT person_name, product, price, years, ROW_NUMBER() OVER ( PARTITION BY years ORDER BY price) AS row_num FROM Persons;
כאן, השתמשנו בסעיף PARTITION BY המחלק את 'אנשים' טבלה למחיצות המבוססות על 'שנים' טור. לאחר הביצוע, נקבל את הפלט שלהלן:
מחרוזת json java
3. ROW_NUMBER() דוגמה לעידון
אנו יכולים גם להשתמש בפונקציה ROW_NUMBER() עבור עימוד. לדוגמה , אם ברצוננו לקבל את כל המידע של אדם באפליקציה לפי דפים, נקצה תחילה לכל שורה מספר רציף באמצעות הפונקציה ROW_NUMBER() . שנית, מיין את השורות לפי העמוד המבוקש.
ההצהרה הבאה מסבירה זאת בצורה ברורה יותר:
SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY price) AS row_num, person_name, product, price FROM Persons) P WHERE row_num > 3 AND row_num <= 6; < pre> <p>It will give the following output:</p> <img src="//techcodeview.com/img/sql-server-tutorials/96/sql-server-row-number-4.webp" alt="SQL Server Row Number"> <p>If we do not want to use the <strong>subquery</strong> , we can use the <strong>common table expression (CTE)</strong> as below statement:</p> <pre> WITH CTE_Person AS ( SELECT ROW_NUMBER() OVER (ORDER BY price) AS row_num, person_name, product, price FROM Persons) SELECT * FROM CTE_Person WHERE row_num > 3 AND row_num <= 6; < pre> <p>In this example, we have first specified the CTE that uses the ROW_NUMBER() function to assign each row in the result set sequentially. Second, the outer query returned the desired result. After execution, we will get the following output:</p> <img src="//techcodeview.com/img/sql-server-tutorials/96/sql-server-row-number-5.webp" alt="SQL Server Row Number"> <h3>Conclusion</h3> <p>In this article, we learned how to give a sequential number to each record within a partition of a query using the ROW NUMBER() function in SQL Server.</p> <hr></=></pre></=>=>