דילוג לתוכן המרכזי
מודול 13 · שיעור 3 מתוך 451/57 בקורס~15 min
שיעורי מודול (3/4)

דירוגים: ROW_NUMBER, RANK ו-DENSE_RANK

דירוגים: ROW_NUMBER, RANK ו-DENSE_RANK

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

כדי לגרום להם לפעול נגד קריטריון, עלינו להשתמש בסעיף ORDER BY בתוך OVER().

שלישיית הדירוג

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

על ידי שילוב של PARTITION BY וORDER BY יחד בתוך OVER() נוכל לקבל את "3 המובילים לכל קטגוריה"!

פעילות גופנית#sql.m13.l3.e1
ניסיונות: 0טוען...

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

טוען עורך...
הצג רמז

DENSE_RANK() OVER(ORDER BY ID DESC).

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#sql.m13.l3.e2
ניסיונות: 0טוען...

בנה דירוג לכל 'מזהה_קטגוריה' בהתבסס על מחיר המוצרים ('מוצרים'). חלץ 'category_id', 'id', 'price' והוסף 'price_rank' באמצעות ROW_NUMBER() בסדר 'price' יורד, חלוקה לפי 'category_id'.

טוען עורך...
הצג רמז

שלב PARTITION BY category_id ORDER BY price DESC בתוך ה-OVER.

הפתרון זמין לאחר 3 ניסיונות