לעתים מזומנות במערכות BI, נהוג לחלק נתונים מספרים לקבוצות, לדוגמא, גיל. במקום לציין את הגיל, כלומר הזמן בשנים מתאריך הלידה ועד היום, אנו רוצים לשייך את הגיל לקבוצת גיל. הדרך המסורתית לעשות זאת, היא באמצעות טבלת קבוצות גיל המקושרת לשדה גיל על ידי complex join עם Between.
בבסיס הנתונים Oracle, קיימת פונקציה מעניינת, המאפשרת את אותה פעולה בקלות רבה יותר. שם הפונקציה: WIDTH_BUCKET.
input:
הפונקציה מקבלת טווח נתונים המחולק לאינטרוולים ומחזירה את מספר האינטרוול שבו הערך נמצא.
(width_bucket(field,min,max,num_of_intervals
הסבר:
field: השדה המספרי שאותו רוצים לחלק לקבוצות
min: הערך המינימלי שאותו רוצים להכליל בקבוצות
max: הערך המקסימלי שאותו רוצים להכליל בקבוצות
num_of_intervals: מספר האינטרוולים לחלוקה
output:
מספר האינטרוול שבו הערך של השדה נמצא.
דוגמא:
טבלת emp מכילה שדה שכר: sal, המכיל את הערכים הבאים:
SAL
------
800
950
1100
1250
1300
1500
1600
2450
2850
2975
3000
5000
לצורך העניין , נרצה לחלק את השכר ל3 קבוצות שכר:
0-2000, 2001-4000, 4001-6000
אם כך ,עלינו לבצע את השאילתא הבאה:
select sal, width_bucket(sal,0,6000,3) grp from emp
ונקבל:
GRP SAL
----- ----------
800 1
1600 1
1250 1
2975 2
1250 1
2850 2
2450 2
3000 2
5000 3
1500 1
1100 1
GRP SAL
----- ----------
950 1
3000 2
1300 1
מהתוצאה של השאילתא, אנו רואים שהשכר הנמוך, קיבל קבוצה 1, השכר הבינוני, קיבל קבוצה 2, והשכר הגבוה, קיבל קבוצה 3.
שימו לב, לנקודות הבאות:
הפונקציה יכולה להחזיר גם ערך 0 שפרושו, מתחת למינימום שנקבע. או במקרה זה, מתחת ל0. כמו כן, יכולה להחזיר את הערך המקסימלי+1,שפרושו מעל הערך המקסימלי שנקבע. לדוגמא, אם היה בטבלה שכר של 8000, אזי הפונקציה היתה מחזירה 3+1, כלומר 4.
הגבול התחתון של האינטרוול, הוא הגבול התחתון המחושב, לעומת זאת, הגבול העליון הוא הגבול העליון המחושב פחות מספר קטן מאד. לדוגמא, אם הינו בוחרים מינימום 0 ומקסימום 10000 המחולק ל10 אינטרוולים. לדוגמא, הגבול התחתון של האינטרוול השלישי היה 2000, לעמות זאת, הגבול העליון של האינטרוול השלישי היה 3000 פחות אלפית האלפית. לכן המספר 3000 עצמו, נכלל כבר באינטרוול הרביעי!
