שיעורי מודול (3/4)
דירוגים: ROW_NUMBER, RANK ו-DENSE_RANK
דירוגים: ROW_NUMBER, RANK ו-DENSE_RANK
מעבר לצבירה, פונקציות החלונות זוהרות בהזמנה ובדירוג. ישנן פונקציות שתוכננו במיוחד לעבודה בתוך חלונות (OVER() הופך להיות חובה) שמקצות מספרים עוקבים או מיקומי דירוג.
כדי לגרום להם לפעול נגד קריטריון, עלינו להשתמש בסעיף ORDER BY בתוך OVER().
שלישיית הדירוג
ROW_NUMBER(): מקצה מספר רציף רגיל (1, 2, 3...) לכל שורה, תוך ניתוק קשרים באופן שרירותי.RANK(): מייצר את אפקט ה"אולימפיאדה": 1, 2, 2, 4. הוא משאיר פער (דילוג על ה-"3") ומקצה את אותה הדרגה במקרה של תיקו.DENSE_RANK(): מצפיפות דרגות: 1, 2, 2, 3. לעולם אין פער לאחר שוויון.
SELECT
product_name,
price,
RANK() OVER(ORDER BY price DESC) AS price_rank
FROM products;על ידי שילוב של PARTITION BY וORDER BY יחד בתוך OVER() נוכל לקבל את "3 המובילים לכל קטגוריה"!
חלץ 'שם_שם', 'שם_משפחה' ו'מזהה' מטבלת הלקוחות ('לקוחות') (נניח ש'מזהה' הוא מספר המזהה). הוסף עמודת 'דירוג' באמצעות DENSE_RANK() על סמך 'מזהה' יורד (מהגבוה לנמוך ביותר).
הצג רמז
DENSE_RANK() OVER(ORDER BY ID DESC).
הפתרון זמין לאחר 3 ניסיונות
בנה דירוג לכל 'מזהה_קטגוריה' בהתבסס על מחיר המוצרים ('מוצרים'). חלץ 'category_id', 'id', 'price' והוסף 'price_rank' באמצעות ROW_NUMBER() בסדר 'price' יורד, חלוקה לפי 'category_id'.
הצג רמז
שלב PARTITION BY category_id ORDER BY price DESC בתוך ה-OVER.
הפתרון זמין לאחר 3 ניסיונות