يتيح لك تجميع البيانات تقسيم جميع البيانات إلى مجموعات منطقية، مما يجعل من الممكن إجراء حسابات إحصائية بشكل منفصل في كل مجموعة.
يتم إنشاء المجموعات باستخدام عبارة GROUP BY الخاصة بعامل التشغيل SELECT. دعونا نفكر في مثال.
Run SQLSELECT Product, SUM(Quantity) AS Product_num
FROM Sumproduct
GROUP BY Product
ومن خلال هذا الطلب، استخرجنا معلومات عن عدد المنتجات المباعة في كل شهر. يطلب عامل التشغيل SELECT إخراج عمودين المنتج - اسم المنتج وProduct_num - الحقل المحسوب الذي أنشأناه لعرض كمية المنتجات المباعة (صيغة الحقل SUM(Quantity)). تخبر جملة GROUP BY نظام إدارة قواعد البيانات بتجميع البيانات حسب عمود المنتج.
مثلما نقوم بتصفية الصفوف في الجدول، يمكننا التصفية على البيانات المجمعة. لهذا، يوجد عامل التشغيل HAVING في SQL. لنأخذ المثال السابق ونضيف تصفية المجموعة.
Run SQLSELECT Product, SUM(Quantity) AS Product_num
FROM Sumproduct
GROUP BY Product
HAVING SUM(Quantity) > 4000
نرى أنه بعد حساب عدد البضائع المباعة لكل منتج، يقوم نظام إدارة قواعد البيانات "بقطع" تلك المنتجات التي تم بيعها أقل من 4000 وحدة.
كما ترون، فإن عامل التشغيل HAVING يشبه إلى حد كبير عامل التشغيل WHERE، ولكن هناك فرق كبير بينهما: WHERE يقوم بتصفية البيانات قبل تجميعها، وHAVING يقوم بتصفية البيانات بعد التجميع. وبالتالي، لن يتم تضمين الصفوف التي تمت إزالتها بواسطة جملة WHERE في المجموعة. لذلك، يمكن استخدام عوامل التشغيل WHERE وHAVING في نفس الجملة. خذ بعين الاعتبار مثالا:
Run SQLSELECT Product, SUM(Quantity) AS Product_num
FROM Sumproduct
WHERE Product <> 'Skis Long'
GROUP BY Product
HAVING SUM(Quantity) > 4000
أضفنا عامل التشغيل WHERE إلى المثال السابق، حيث حددنا المنتج "Skis Long"، والذي أثر بدوره على التجميع بواسطة عامل التشغيل HAVING. ونتيجة لذلك، يمكننا أن نرى أن منتج "Skis Long" لم يدخل في قائمة المجموعات التي تضم أكثر من 4000 منتج مباع.
كما هو الحال مع أخذ عينات البيانات العادية، يمكننا فرز المجموعات بعد التجميع باستخدام عامل التشغيل HAVING. لهذا، يمكننا استخدام عامل التشغيل المألوف بالفعل ORDER BY. في هذه الحالة، تطبيقه مشابه للأمثلة السابقة. مثال:
Run SQLSELECT Product, SUM(Quantity) AS Product_num
FROM Sumproduct
GROUP BY Product
HAVING SUM(Quantity) > 3000
ORDER BY SUM(Quantity)
أو ببساطة حدد رقم الحقل بالترتيب الذي نريد الفرز به:
Run SQLSELECT Product, SUM(Quantity) AS Product_num
FROM Sumproduct
GROUP BY Product
HAVING SUM(Quantity) > 3000
ORDER BY 2
نرى أنه من أجل فرز نتائج التلخيص، نحتاج فقط إلى كتابة الجملة باستخدام ORDER BY بعد عامل التشغيل HAVING.