انتقل إلى محتوى الدرس

Distinguishing Super Aggregate NULL تمييز صف المجموع بـ GROUPING

استخدم الدالة القياسية GROUPING(col) في MySQL 8 للتفريق بين قيم NULL الحقيقية وصفوف المجاميع الناتجة عن ROLLUP.
1 صفوف تعليمية
MySQL
8 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

ماذا يحدث إذا كان عمود التجميع نفسه يقبل القيم الفارغة ويحتوي فعلياً على صفوف 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;