در SQL، عبارت HAVING برای فیلتر کردن نتایج گروهبندی شده توسط عبارت GROUP BY استفاده میشود. این عبارت زمانی کاربرد دارد که شما میخواهید شرایطی را برای گروههای داده تعیین کنید، نه برای رکوردهای فردی. برای مثال، فرض کنید یک جدول فروش دارید و میخواهید فقط آن دسته از نمایندگان فروش را که مجموع فروششان از یک مقدار خاص بیشتر است، پیدا کنید. در این وضعیت، HAVING به کار میآید.
فرض کنید شما از GROUP BY برای دستهبندی دادهها استفاده کردهاید و حالا میخواهید این دستهها را براساس شرایط خاصی فیلتر کنید. برای چنین کاری، نمیتوانید از WHERE استفاده کنید، چون WHERE قبل از گروهبندی دادهها اعمال میشود، ولی HAVING بعد از عملیات گروهبندی اعمال میشود.
در واقع، WHERE برای فیلتر کردن رکوردهای فردی قبل از عملیات گروهبندی و HAVING برای فیلتر کردن گروهها بعد از آن عملیات بهکار میرود. این تفاوت بنیادی در استفاده از WHERE و HAVING در SQL است.
در شرایطی که میخواهید میانگین، مجموع یا هر نوع عملیات تجمعی دیگری را محدود کنید، باید از HAVING استفاده نمایید. برخلاف WHERE که نمیتواند عملیات تجمعی را بفیلتر نماید، HAVING بهخوبی از عهده این کار برمیآید. همین ویژگی باعث میشود تا HAVING برای گزارشگیریهای پیچیده و پیشرفته بسیار مؤثر و کاربردی باشد.
مثال کد SQL با استفاده از HAVING
SELECT sales_rep, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY sales_rep
HAVING SUM(sales_amount) > 10000;
توضیح خط به خط کد
SELECT sales_rep, SUM(sales_amount) AS total_sales
این خط انتخاب میکند که نام نماینده فروش و مجموع فروشها نمایش داده شوند.
FROM sales
این خط مشخص میکند که دادهها از جدول فروش استخراج شوند.
GROUP BY sales_rep
این خط دادهها را بر اساس نام نماینده فروش گروهبندی میکند.
HAVING SUM(sales_amount) > 10000
این خط گروههایی را انتخاب میکند که مجموع فروش آنها بیشتر از 10000 باشد.