logo

פונקציית RANK ב-SQL Server

פונקציית RANK ב-SQL Server היא סוג של פונקציית דירוג. פונקציה זו תהיה הקצה את המספר לכל שורה בתוך המחיצה של פלט . הוא מקצה את הדירוג לכל שורה בתור אחד בתוספת דירוג השורה הקודמת. כאשר הפונקציה RANK מוצאת שני ערכים זהים בתוך אותה מחיצה, היא מקצה להם את אותו מספר דירוג. בנוסף, המספר הבא בדירוג יהיה הדירוג הקודם בתוספת מספרים כפולים. לכן, פונקציה זו לא תמיד מקצה את דירוג השורות בסדר עוקב.

javatpoint java

פונקציית RANK היא גם תת-חלק מפונקציות החלון. יש לזכור את הנקודות הבאות בעת השימוש בפונקציה זו :

  • זה תמיד עובד עם פסקת OVER() .
  • הוא מקצה דירוג לכל שורה בהתבסס על הסעיף ORDER BY.
  • הוא מקצה דירוג לכל שורה בסדר רצוף.
  • זה תמיד מקצה דירוג לשורות, מתחיל באחת עבור כל מחיצה חדשה.

הערה: דירוג מקצה ערכים זמניים לשורות בתוך המחיצה כאשר השאילתה מבוצעת.

SQL Server מספק את פונקציות הדירוג הבאות :

  • דַרגָה()
  • ROW_NUMBER()
  • DENSE_RANK()
  • NTILE()

הבה נלמד כל פונקציית דירוג בפירוט. ראשית, ניצור טבלה להדגמה של כל הפונקציות הללו. ההצהרות הבאות יוצרות טבלה בשם rank_demo עם שלוש עמודות:

 CREATE TABLE rank_demo ( first_name VARCHAR(60), last_name VARCHAR(40), city VARCHAR(30) ); 

לאחר מכן, נוסיף כמה שורות לטבלה זו כדלקמן:

 INSERT INTO rank_demo (first_name, last_name, city) VALUES ('Luisa', 'Evans', 'Texas'), ('Paul', 'Ward', 'Alaska'), ('Peter', 'Bennett', 'California'), ('Carlos', 'Patterson', 'New York'), ('Rose', 'Huges', 'Florida'), ('Marielia', 'Simmons', 'Texas'), ('Antonio', 'Butler', 'New York'), ('Diego', 'Cox', 'California'); 

אנו יכולים לאמת את הטבלה באמצעות המשפט SELECT. זה מציג את הפלט שלהלן:

פונקציית RANK ב-SQL Server

פונקציה RANK()

פונקציה זו משמשת לקביעת הדירוג עבור כל שורה בערכת התוצאות. התחביר הבא ממחיש את השימוש בפונקציית RANK ב-SQL Server:

 SELECT column_name RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name; 

בתחביר הזה,

  • ה סעיף OVER מגדיר את החלוקה והסדר של תוצאה לפני החלת פונקציית החלון המשויכת.
  • ה PARTITION BY סעיף מחלק את הפלט שמופק על ידי סעיף FROM למחיצה. לאחר מכן הפונקציה מוחלת על כל מחיצה ומתחילה מחדש כאשר גבול החלוקה חוצה מחיצות. אם לא הגדרנו את הסעיף הזה, הפונקציה תתייחס לכל השורות כמחיצה אחת.
  • ה מיין לפי הוא משפט נדרש הקובע את סדר השורות באופן יורד או עולה בהתבסס על שם עמודה אחד או יותר לפני הפעלת הפונקציה.

דוגמא

הבה נראה כיצד פועלת הפונקציה RANK() ב-SQL Server. ההצהרה שלהלן תשתמש בפונקציית הדירוג כדי להקצות מספור לכל שורה:

 SELECT first_name, last_name, city, RANK () OVER (ORDER BY city) AS Rank_No FROM rank_demo; 

מכיוון שלא השתמשנו ב PARTITION BY סעיף , הפונקציה התייחסה לכל התוצאה כמחיצה בודדת. ביצוע ההצהרה יציג את הפלט שלהלן:

פונקציית RANK ב-SQL Server

בפלט זה, אנו יכולים לראות שחלק מהשורות מקבלות את אותה דירוג מכיוון שיש להן אותו ערך ב- טור עיר . והמספר הבא בדירוג יהיה הדירוג הקודם שלו בתוספת מספר מספרים כפולים.

ההצהרה הבאה היא דוגמה אחרת שבו אנחנו הולכים להשתמש ב-partition by clause שתחלק את השורות על סמך ה עִיר עמודה והקצה דירוג לכל שורה בתוך מחיצה. סדר הפלט מבוסס על שם פרטי :

 SELECT first_name, last_name, city, RANK () OVER (PARTITION BY city ORDER BY first_name) AS Rank_No FROM rank_demo; 

זה יציג את הפלט שלהלן:

פונקציית RANK ב-SQL Server

ROW_NUMBER() פונקציה

פונקציה זו משמשת החזר את המספר הרציף הייחודי עבור כל שורה בתוך המחיצה שלו. מספור השורות מתחיל באחת ועולה באחת עד שמגיעים למספר השורות הכולל של המחיצה. הוא יחזיר את הדרגות השונות לשורה עם ערכים דומים שהופכים אותה לשונה מהפונקציה RANK() .

ממשק דומה ב-java

התחביר שלהלן ממחיש את השימוש בפונקציה ROW_NUMBER() ב-SQL Server:

 SELECT column_name ROW_NUMBER() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name; 

דוגמא

בצע את השאילתה הבאה כדי להקצות מספר רצף לכל שורה:

 SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city) AS my_rank FROM rank_demo; 

זה יקצה את הדירוג לטבלה לפי שלהם עִיר . כאן אנו יכולים לראות שהוא מקצה דרגות שונות לשורה בעלת אותם ערכי עיר.

פונקציית RANK ב-SQL Server

אם נשנה את סדר המיון מ עולה ליורד עם סעיף ORDER BY, פונקציה זו תשנה גם את ה-RANK בהתאם. ראה את ההצהרה שלהלן:

 SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city DESC) AS my_rank FROM rank_demo; 

הנה התוצאה:

פונקציית RANK ב-SQL Server

פונקציית DENSE_RANK()

פונקציה זו מקצה דירוג ייחודי עבור כל שורה בתוך מחיצה לפי ערך העמודה שצוין ללא פערים. זה תמיד מציין את הדירוג בסדר רצוף. אם נקבל א ערך כפול , פונקציה זו תקצה לה את אותה דירוג, והדירוג הבא יהיה המספר הרציף הבא. מאפיין זה שונה מהפונקציה DENSE_RANK() מהפונקציה RANK().

התחביר שלהלן ממחיש את השימוש בפונקציה DENSE_RANK() ב-SQL Server:

 SELECT column_name DENSE_RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name; 

דוגמא

השאילתה הבאה משתמשת בפונקציה DENSE_RANK() כדי להקצות מספר דירוג לכל שורה:

 SELECT first_name, last_name, city, DENSE_RANK() OVER(ORDER BY city) AS my_rank FROM rank_demo; 

זה יחזיר את הפלט למטה שבו נוכל לראות שלערכים הכפולים יש את אותה דירוג, והדירוג הבא יהיה המספר הרציף הבא.

פונקציית RANK ב-SQL Server

זוהי דוגמה נוספת לפונקציה DENSE_RANK() באמצעות פסקת PARTITION BY. סעיף זה יחלק את השורות על סמך עמודת העיר, והסדר של קבוצת תוצאות מבוסס על שם_השם:

100 קמ"ש עד קמ"ש
 SELECT first_name, last_name, city, DENSE_RANK() OVER(PARTITION BY city ORDER BY first_name) AS my_rank FROM rank_demo; 

נקבל את הפלט שלהלן כי אין שני שמות זהים. במקרה זה, הפלט דומה לפונקציה RANK() .

פונקציית RANK ב-SQL Server

בואו נעדכן את השם עם השאילתה הבאה:

ציר הפנדה
 Update rank_demo set first_name = 'Diego' WHERE city = 'California' 

כעת, בצע שוב את אותה שאילתה. נראה שהטבלה הזו קיבלה את אותו השם קליפורניה סיטי . לכן, הדרגה זהה גם עבור שני השמות.

פונקציית RANK ב-SQL Server

פונקציית NTILE(N).

פונקציה זו משמשת להפיץ שורות של מחיצה מסודרת למספר מוגדר מראש (N) של קבוצות שוות בערך. כל קבוצת שורות מקבלת את הדרגה שלה בהתבסס על התנאי המוגדר ומתחילה מספור מקבוצה אחת. זה מקצה א מספר דלי עבור כל שורה בקבוצה המייצגת את הקבוצה שאליה היא שייכת.

התחביר הבא ממחיש את השימוש בפונקציית NTILE() ב-SQL Server:

 SELECT column_name NTILE(N) OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name; 

דוגמא

השאילתה הבאה משתמשת בפונקציה NTILE() כדי להקצות מספר דירוג לכל שורה:

 SELECT first_name, last_name, city, NTILE(3) OVER(ORDER BY city) AS my_rank FROM rank_demo; 

לטבלה שצוינה יש שמונה שיאים . לכן, ה NTILE(3) אומר שקבוצת התוצאות חייבת להיות א קבוצה של שלושה תקליטים . ביצוע ההצהרה יציג את הפלט שלהלן:

פונקציית RANK ב-SQL Server

מאמר זה יסביר את כל פונקציות ה-RANK המשמשות ב-SQL Server עם דוגמאות שונות. זה גם מראה את ההבדלים העיקריים בין הפונקציות הללו. פונקציות אלה שימושיות מאוד למפתחים לחקירה ולניהול הנתונים שלהם בצורה טובה.