HAVING ใช้ทำอะไร?
HAVING ใช้กรองกลุ่มข้อมูล หลังจาก GROUP BY เหมือน WHERE แต่ทำงานบนผลลัพธ์ของฟังก์ชันรวม
รูปแบบคำสั่ง
SELECT expr1, expr2, ..., expr_n,
aggregate_function(expr)
FROM table_name
[WHERE condition]
GROUP BY expr1, expr2, ..., expr_n
HAVING having_condition;
ความแตกต่าง WHERE vs HAVING
| WHERE | HAVING |
|---|---|
| กรองแถว ก่อน จัดกลุ่ม | กรองกลุ่ม หลัง จัดกลุ่ม |
| ไม่ใช้ฟังก์ชันรวมได้ | ใช้ฟังก์ชันรวมได้ (SUM, COUNT...) |
ตัวอย่าง
1. HAVING กับ SUM
SELECT bophan, SUM(soluong) AS 'Tong so luong'
FROM sanpham
GROUP BY bophan
HAVING SUM(soluong) > 100;
คืนเฉพาะแผนกที่รวมจำนวน > 100
2. HAVING กับ COUNT
SELECT thanhpho, COUNT(*) AS 'So nhanvien'
FROM nhanvien
WHERE bang = 'California'
GROUP BY thanhpho
HAVING COUNT(*) > 20;
กรองเมืองใน California ที่มีพนักงาน > 20 คน
3. HAVING กับ MIN
SELECT bophan, MIN(luong) AS 'Luong thap nhat'
FROM nhanvien
GROUP BY bophan
HAVING MIN(luong) >= 50000;
เฉพาะแผนกที่เงินเดือนต่ำสุด ≥ 50,000
4. HAVING กับ MAX
SELECT ho, MAX(luong) AS 'Luong cao nhat'
FROM nhanvien
GROUP BY bophan
HAVING MAX(luong) > 34000;
เฉพาะกลุ่มที่เงินเดือนสูงสุด > 34,000