تصفية المجموعات باستخدام HAVING

مكتمل

عند إنشاء مجموعات باستخدام عبارة GROUP BY، يمكنك تصفية النتائج بشكل أكبر. تعمل عبارة HAVING كعامل تصفية على المجموعات. هذا مشابه للطريقة التي تعمل بها عبارة WHERE كعامل تصفية على الصفوف التي تم إرجاعها بواسطة عبارة FROM.

تمكنك عبارة HAVING من إنشاء شرط بحث، مشابه من الناحية المفاهيمية لتخمين عبارة WHERE، والتي تختبر بعد ذلك كل مجموعة تم إرجاعها بواسطة عبارة GROUP BY.

يحسب المثال التالي الطلبات لكل عميل، ويصفي النتائج لتضمين العملاء الذين وضعوا أكثر من 10 طلبات فقط:

SELECT CustomerID,
      COUNT(*) AS OrderCount
FROM Sales.SalesOrderHeader
GROUP BY CustomerID
HAVING COUNT(*) > 10;

مقارنة الاضطرار إلى المكان

بينما تقوم كل من عبارات HAVING و WHERE بتصفية البيانات، تذكر أن WHERE تعمل على الصفوف التي تم إرجاعها بواسطة عبارة FROM. إذا كانت مجموعة حسب ... يوجد قسم HAVING في الاستعلام الخاص بك بعد عبارة WHERE، ستقوم عبارة WHERE بتصفية الصفوف قبل معالجة GROUP BY - مما قد يحد من المجموعات التي يمكن إنشاؤها.

تتم معالجة عبارة HAVING بعد GROUP BY وتعمل فقط على المجموعات، وليس صفوف التفاصيل. للتلخيص:

  • تقوم عبارة WHERE بتصفية الصفوف قبل تشكيل أي مجموعات
  • تقوم عبارة HAVING بتصفية مجموعات بأكملها، وعادة ما تنظر إلى نتائج التجميع.