SQL DENSE_RANK() פונקציה

Sql Dense Rank Pwnqzyh



פונקציות חלון הן מאפיין מכריע ב-SQL וממלאות תפקיד מהותי בחישובי נתונים מורכבים ופעולות במסדי נתונים של SQL. אחת הפונקציות בפונקציות חלון SQL היא ה-dense_rank().

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

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







איך זה עובד

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



הפונקציה פועלת על ידי הקצאת דירוג לכל שורה בערכת התוצאות החל מדרגה 1 והגדלה ב-1 עבור כל ערך ייחודי בעמודות.



השורות בעלות ערכים דומים (כפולים) בעמודות שצוינו מוקצות באותה דירוג והשורה הבאה בעלת ערך שונה מוקצית בדרגה הפנוי הבאה, ללא פערים.





כפי שציינו, הפונקציה לא משאירה פערים שבהם יש ערכים כפולים מה שמבדיל אותה מהפונקציה rank() .

שימוש נפוץ בפונקציה dense_rank() הוא ביצוע פעולות הדירוג. לדוגמה, אנו יכולים להשתמש בו כדי למצוא את N הרשומות המובילות וכו'.



תחביר פונקציות:

הבא מתאר את התחביר של הפונקציה dense_rank() :

DENSE_RANK() OVER (

[PARTITION BY partition_expression, ... ]

להזמין BY sort_expression [ASC | DESC],...

)

בתחביר הנתון:

  1. אנחנו מתחילים עם הפונקציה dense_rank() עצמה.
  2. סעיף ה-OVER מסמן את תחילת מפרטי פונקציית החלון. זה מגדיר כיצד הדירוג מיושם בתוך ערכת התוצאות.
  3. ה-PARTITION BY partition_expression הוא משפט אופציונלי המאפשר לנו לחלק את הסט שנוצר לקבוצות או מחיצות על סמך עמודה אחת או יותר. הדירוג מוחל בנפרד על כל מחיצה כאשר הדירוג מתאפס במחיצה חדשה.
  4. ה-ORDER BY sort_expression מציין את הסדר שבו נרצה להשתמש כדי למיין את הנתונים במחיצות המתקבלות.

נתונים לדוגמה

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

דוגמה 1: שימוש בפונקציה Dense_Rank()

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

בחר

מספר הזמנה,

שם משתמש_לקוח,

מוצר_נרכש,

DENSE_RANK() OVER (

להזמין על ידי

מחיר דיסק

) מחיר_דירוג

מ

הזמנות o;

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

הפלט המתקבל הוא כדלקמן:

דוגמה 2: PARTITION BY

אנו יכולים גם להוסיף את סעיף PARTITION BY כדי לקבץ את הנתונים למקטעים שונים כגון על סמך המוצר שנרכש.

שאילתה לדוגמה היא כדלקמן:

בחר

מספר הזמנה,

שם משתמש_לקוח,

מוצר_נרכש,

DENSE_RANK() OVER (

חלוקה לפי מוצר_נרכש

להזמין על ידי

מחיר דיסק

) מחיר_דירוג

מ

הזמנות o;

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

סיכום

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