תצורות הדירוג
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 |