המשפט GROUP BY מאפשר את השמוש בהגבלה WITH ROLLUP שגורמת לכך שיתווספו שורות נוספות לתוצאת הסיכום. שורות אלו מייצגים פעולות HIGH LEVEL של סכום. לכן ROLLUP מאפשר לנו לענות על שאלות במספר רמות של ניתוח בשאילתא בודדת. ניתן להשתמש בו, לדוגמא, בשביל לספק תמיכה לפעולות ניתוח נתונים מקוון (OLAP).
בשביל ההמחשה, נניח שלטבלה בעלת השם sales יש את העמודות: year,country,product ו-profit שנועדה לרשום את רווחיות המכירות:
|
ניתן לבצע סיכום לשנה של תוכן הטבלאות באמצעות פקודת GROUP BY פשוטה בצורה הבאה:
|
הפלט מראה את הרווח הכללי לכל שנה, אבל אם אנו רוצים גם לקבוע את הרווח הכללי לכל השנים, אנו חייבים לחבר את הערכים הבודדים לבד ולהריץ שאילתא נוספת. או שאנו יכולים להשתמש ב-ROLLUP, שמספקת את שתי הרמות של הניתוח באמצעות שאילתא בודדת. הוספת WITH ROLLUP ל-GROUP BY תגרום לשאילתא לייצור שורה נוספת שמראה את הערכים של הסכום הכולל של כל השנים:
|
השורה שצוברת את הסכום הכולל מזוהה עם הערך NULL בטור של year.
ל-ROLLUP יש השפעה הרבה יותר מורכבת כאשר יש מספר רב של טורי GROUP BY. במקרה זה, כל זמן שיש איזה שהוא "break" (שינוי בערך) חוץ מטור ה-grouping האחרון, השאילתא מייצרת שורה של צובר כללי נוסף. לדוגמא, ללא ROLLUP, פעולת סכום על טבלת ה-sales שמבוססת על year,country ו-product יכולה להיראות כך:
|
הפלט מראה את ערכי הסכום רק ברמת הניתוח של year/country/product. כאשר נוסיף את ROLLUP, השאילתא תייצר שורות נוספות:
|
לשאילתא זו, הוספת ROLLUP גורמת לפלט להכיל מידע לגבי הסכום בארבע רמות של ניתוח. כאן נוכל לדעת כיצד להסביר את הפלט לאחר שילוב ה-ROLLUP:
× לאחר כל מערך של שורות מוצרים לשנה מסוימת ולמדינה מסוימת, מתווספת שורה נוספת של סכום שמחווה על הסכום של כל המוצרים. בשורות אלו, עמודת ה-product מסתיימת ב-NULL.
× לאחר כל מערך של שורות לשנה מסוימת, מתווספת שורה נוספת של סכום שמחווה על הסכום בכל המדינות והמוצרים. בשורות אלו, עמודות country ו-products מסתיימות ב-NULL.
× לבסוף, לאחר כל שאר השורות, מתווספת שורה נוספת של סכום שמחווה על הסכום הכולל של השנים, המוצרים והמוצרים. בשורה זו, עמודות year,country ו-products מסתיימות ב-NULL.