תצורות הדירוג
SQL#והפעם- על ההבדלים בין שתי האופציות לדירוג ערכים ()rank ו-()dense rank
הבעיה שלנו היא ש..
אנחנו רוצים להבין מהן פונקציות הדירוג הקיימות ומה ההבדלים ביניהם.
הטיפ שלי
קיימות שתי פונקציות לדירוג: rank()
ו-dense_rank()
פונקציית rank()
תדרג את הערכים בעמודה שנגדיר מ-1 ומעלה, אך במידה ויהיו מספר ערכים זהים הם גם יהיו שווים בדירוג, ודירוג הערך הבא לא יהיה מספר עקיב, אלא יהיה שווה לדירוג הקודם + מספר הפעמים שהדירוג הקודם הופיע.
באמצעות partition by
נוכל להגדיר חלוקה של הדירוג למקטעים, כך שיסתיים במקטע אחד ויתחיל מההתחלה באחר.
פונקציית ()dense_rank
תדרג את הערכים בעמודה שנגדיר מ-1 ומעלה ובצורה עקבית. כלומר,
במידה ויהיו מספר ערכים זהים הם יהיו שווים גם בדירוג, אך הערך הבא יהיה שווה לדירוג הקודם +1.
בואו ננסה את זה בפועל
הטבלה שלנו:
Competitor | Year | Points |
---|---|---|
Donna | 2016 | 100 |
Dani | 2017 | 99 |
Shimon | 2017 | 100 |
Zlil | 2018 | 50 |
Gil | 2017 | 80 |
Mor 2018 | 70 |
הפקודות שנבצע:
פונקצית rank()
תוצאה:
Competitor | Year | Points | rank |
---|---|---|---|
Donna | 2016 | 100 | 1 |
Shimon | 2017 | 100 | 1 |
Dani | 2017 | 99 | 3 |
Gil | 2017 | 80 | 4 |
Mor | 2018 | 70 | 5 |
Zlil | 2018 | 50 | 6 |
פונקצית dense_rank()
תוצאה:
Competitor | Year | Points | dense_rank |
---|---|---|---|
Donna | 2016 | 100 | 1 |
Shimon | 2017 | 100 | 1 |
Dani | 2017 | 99 | 2 |
Gil | 2017 | 80 | 3 |
Mor | 2018 | 70 | 1 |
Zlil | 2018 | 50 | 2 |