شرح صفوف ومحتوى الفقرة
عند التجميع بعدة أعمدة، يولّد WITH ROLLUP المجاميع الفرعية تدريجياً من اليمين إلى اليسار عبر مستويات الهرم التجميعي:
- المستوى الأول (صفوف التفصيل): في
GROUP BY region, city WITH ROLLUPتظهر أولاً مجاميع كل مدينة داخل إقليمها. - المستوى الثاني (المجموع الفرعي للإقليم): يتحول العمود الأيمن
cityإلىNULLلإنتاج صف المجموع الفرعي الخاص بكل إقليم(region, NULL). - المستوى الثالث (المجموع العام الكلي): في النهاية يتحول العمودان معاً إلى
(NULL, NULL)لإنتاج صف المجموع العام الكلي لجميع الأقاليم والمدن!
لذلك احرص دائماً على ترتيب أعمدة GROUP BY من المستوى الأوسع (كالإقليم أو السنة) على اليسار إلى المستوى الأدق (كالمدينة أو الشهر) على اليمين.
SQL
-- Multi-level rollup: per (dept, role), per dept, and grand total
SELECT dept_id,
job_role,
COUNT(*) AS headcount,
SUM(salary) AS payroll_usd
FROM employees
WHERE is_active = 1
GROUP BY dept_id, job_role WITH ROLLUP;