شرح صفوف ومحتوى الفقرة
ماذا يحدث إذا كان عمود التجميع نفسه يقبل القيم الفارغة ويحتوي فعلياً على صفوف NULL في الجدول؟ سيظهر NULL في صف البيانات الفعلي وفي صف المجموع العام معاً! يعالج MySQL 8 هذا الالتباس عبر الدالة القياسية GROUPING(expr):
- القيمة
0: تعني أن الصف يمثّل مجموعة بيانات عادية (حتى لو كانت قيمة العمود الأصلية المسجلة في الجدول هيNULL). - القيمة
1: تعني أن القيمةNULLالظاهرة في العمود هي علامة مجموع فرعي أو كلي ولّدتها ميزةWITH ROLLUP.
يمكنك استخدام GROUPING(col) في قائمة SELECT أو في ORDER BY لدفع صفوف المجاميع إلى النهاية دائماً، أو داخل HAVING لاستخراج صفوف المجاميع الفرعية فقط.
SQL
-- Distinguish real NULLs (0) from ROLLUP subtotal rows (1)
SELECT dept_id,
job_role,
GROUPING(dept_id) AS is_grand_total,
GROUPING(job_role) AS is_dept_subtotal,
SUM(salary) AS total_salary
FROM employees
GROUP BY dept_id, job_role WITH ROLLUP;