With Rollup
SQL#והפעם- בואו נדבר על אגרגציה על אגרגציה / אגרגצית ביניים
הבעיה שלנו היא ש…
לעיתים אנו מעוניינים לראות אגרגציה סופית בנוסף לארגציה קיימת. כלומר כאשר אנו משתמשים בפונקציית אגרגציה כלשהי כמו לדוגמה sum()
, נרצה שתוצג גם אגרגציה סופית של כל השורות, כלומר סכימה סופית של עמודת ה-sum
.
הטיפ שלי
להשתמש בפקודה with rollup
אותה כותבים לאחר פקודת ה-group by
, כך תופיע שורה נוספת (בהתאם לעמודה עליה נעשה group by
), שתציג אגרגציה כוללת של כל השורות שמעליה.
בואו ננסה את זה בפועל
הטבלה שלנו:
City | Year | Revenue |
---|---|---|
‘TEL AVIV’ | 2015 | 100000 |
‘TEL AVIV’ | 2016 | 150000 |
‘JERUSALEM’ | 2017 | 76500 |
‘EILAT’ | 2015 | 20000 |
‘EILAT’ | 2016 | 10500 |
‘EILAT’ | 2017 | 5000 |
אפשרות אחת – אגרגציה על אגרגציה
הפקודות שנבצע:
תוצאה:
city | sum(revenues) |
---|---|
‘EILAT’ | ‘35500’ |
’ JERUSALEM’’ | ‘76500’ |
‘TEL AVIV ‘ | ‘250000’ |
NULL | ‘362000’ |
סך הכל הרווחנו בכל הערים ובכל השנים 362,000 ש״ח.
אפשרות שניה – אגרגצית ביניים
הפקודות שנבצע:
תוצאה:
city | year | sum(revenues) |
---|---|---|
‘EILAT’ | ‘2015’ | ‘20000’ |
‘EILAT’ | ‘2016’ | ‘10500’ |
‘EILAT’ | ‘2017’ | ‘5000’ |
‘EILAT’ | NULL | ‘35500’ |
‘JERUSALEM’ | ‘2017’ | ‘76500’ |
‘JERUSALEM’ | NULL | ‘76500’ |
‘TEL AVIV’ | ‘2015’ | ‘100000’ |
‘TEL AVIV’ | ‘2016’ | ‘150000’ |
‘TEL AVIV’ | NULL | ‘250000’ |
NULL | NULL | ‘362000’ |
ניתן לראות סיכום עבור כל עיר בנפרד. כך שסך הכל הרווחנו בכל השנים באילת 35,500 ש״ח, בירושלים 76,500 ש״ח, בתל אביב 250,000. וסיכום עבור כל הערים יחד, סך הכל עבור כל הערים בכל השנים הרווחנו 362,000 ש״ח.