การใช้ HAVING กรองกลุ่มหลัง GROUP BY
ใช้ GROUP BY รวมตาม ProductId แล้ว HAVING AVG(price) < value กรองกลุ่มที่ราคาเฉลี่ยต่ำกว่าเกณฑ์
ตัวอย่าง
mysql> create table DemoTable848(
ProductId int,
ProductPrice int );
Query OK, 0 rows affected (1.20 sec)
mysql> insert into DemoTable848 values(100,30);
mysql> insert into DemoTable848 values(101,50);
mysql> insert into DemoTable848 values(100,40);
mysql> insert into DemoTable848 values(101,25);
mysql> insert into DemoTable848 values(100,20);
ค้นหาสินค้าที่ราคาเฉลี่ย < 35
mysql> select ProductId, avg(ProductPrice)
from DemoTable848
group by ProductId
having AVG(ProductPrice) < 35;
ผลลัพธ์ (ProductId 100 มีราคา 30, 40, 20 -> เฉลี่ย 30):
+-----------+-------------------+
| ProductId | avg(ProductPrice) |
+-----------+-------------------+
| 100 | 30.0000 |
+-----------+-------------------+
WHERE vs HAVING
| คำสั่ง | ใช้กรอง | ทำงานเมื่อ |
|---|---|---|
WHERE | แถวเดี่ยว (Row level) | ก่อน GROUP BY |
HAVING | กลุ่ม (Group level) | หลัง GROUP BY |
สรุป
ใช้ GROUP BY product_id HAVING AVG(price) < 35 เพื่อหาสินค้าที่ราคาเฉลี่ยต่ำกว่าเกณฑ์ HAVING ใช้กับ Aggregate Function เท่านั้น