SQL HAVING Clause

زبان SQL وقتی بخوایم بعد از گروه‌بندی رکوردها رو فیلتر کنیم، از HAVING Clause استفاده می‌کنیم.

در واقع:

  • WHERE برای فیلتر کردن رکوردها قبل از GROUP BY استفاده میشه.

  • HAVING برای فیلتر کردن نتایج بعد از GROUP BY استفاده میشه.

🔹 ساختار کلی

SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1 HAVING condition;

🔹 مثال ساده

جدول: Orders

order_idcustomer_idamount
11500
22300
31200
43400
52100

کوئری:

SELECT customer_id, SUM(amount) AS total_amount FROM Orders GROUP BY customer_id HAVING SUM(amount) > 400;

📌 خروجی:

customer_idtotal_amount
1700

توضیح: فقط مشتری‌هایی نشون داده میشن که جمع سفارش‌هاشون بیشتر از 400 باشه.

🔹 ترکیب WHERE و HAVING

SELECT customer_id, COUNT(order_id) AS order_count FROM Orders WHERE amount > 100 GROUP BY customer_id HAVING COUNT(order_id) >= 2;

📌 توضیح:

  • WHERE amount > 100 → فقط سفارش‌هایی که مبلغشون بالای 100 هست در نظر گرفته میشن.

  • HAVING COUNT(order_id) >= 2 → فقط مشتری‌هایی که حداقل 2 سفارش معتبر دارن نشون داده میشن.

🔹 مثال با چند شرط

SELECT customer_id, AVG(amount) AS avg_amount FROM Orders GROUP BY customer_id HAVING AVG(amount) BETWEEN 200 AND 600;

📌 فقط مشتری‌هایی که میانگین سفارش‌هاشون بین 200 تا 600 باشه نمایش داده میشن.

نکات مهم

  • HAVING همیشه همراه GROUP BY استفاده میشه (ولی میشه به تنهایی هم نوشت).

  • برای فیلتر کردن توابع تجمیعی (SUM, COUNT, AVG, …) باید از HAVING استفاده کنید، نه WHERE.

  • ترتیب اجرا: WHEREGROUP BYHAVINGORDER BY.