HAVING clause คือคำสั่ง SQL ที่ใช้สำหรับกรองข้อมูลจากกลุ่มที่ถูกสร้างขึ้นจาก GROUP BY clause โดย HAVING clause มักจำทำงานร่วมกับคำสั่งในกลุ่ม Aggregate Function คือ SUM, AVG, COUNT, MIN และ MAX โดยคำสั่ง HAVING จะแตกต่างจาก WHERE ตรงที่ WHERE ใช้กรองข้อมูลก่อนจัดกลุ่ม ส่วน HAVING ใช้กรองข้อมูลหลังจากจัดกลุ่มแล้ว สามารเขียน HAVING SQL ได้ดังนี้
ตัวอย่าง วิธีใช้ HAVING clause ใน SQL กับ SUM
SELECT id, SUM(amount)
FROM orders
GROUP BY id
HAVING SUM(amount) > 10
คำสั่งดังกล่าวจะแสดงรายการสินค้าที่มีผลรวมของ amount มากกว่า 10 จากตาราง ordres โดยการใช้คำสั่ง SUM(amount) เพื่อรวมคอลัมน์ amount และใช้ HAVING SUM(amount) > 10 เพื่อกรองข้อมูลจากกลุ่มให้แสดงเฉพาะ SUM(amount) ที่มีค่ามากกว่า 10
ตัวอย่าง วิธีใช้ HAVING clause ใน SQL กับ COUNT
SELECT id, name, COUNT(*)
FROM orders
GROUP BY id
HAVING COUNT(*) >= 5
คำสั่งดังกล่าวจะแสดงข้อมูลจากตาราง orders ที่มีจำนวนแถวมากกว่า หรือเท่ากับ 5 โดยการใช้คำสั่ง COUNT(*) เพื่อนับแถว และกรองข้อมูลจากกลุ่มดังกล่าวด้วย HAVING COUNT(*) >= 5 คือ แสดงเฉพาะแถวที่ COUNT(*) มีค่ามากกว่าหรือเท่ากับ 5
ตัวอย่าง วิธีใช้ HAVING clause ใน SQL กับ MIN
SELECT id, name, MIN(amount)
FROM orders
GROUP BY id
HAVING MIN(amount) < 2
คำสั่งดังกล่าวจะแสดงข้อมูลจากตาราง orders ที่มีค่า amount น้อยที่สุด และน้อยกว่า 2 โดยการใช้คำสั่ง MIN(amount) เพื่อเลือกเฉพาะคอลัมน์ amount ที่น้อยที่สุด จากนั้นกรองกลุ่มของข้อมูลด้วย HAVING MIN(amount) < 2 ทำให้ข้อมูลที่จะแสดงนั้นเงื่อนไขคือ MIN(amount) จะต้องน้อยกว่า 2
ตัวอย่าง วิธีใช้ HAVING clause ใน SQL กับ MAX
SELECT id, name, MAX(amount)
FROM orders
GROUP BY id
HAVING MAX(amount) > 10
คำสั่งดังกล่าวจะแสดงข้อมูลจากตาราง orders ที่มีค่า amount สูงสุด และมากกว่า 10 โดยการใช้คำสั่ง MAX(amount) เพื่อหาค่ามากสุดของคอลัมน์ amount จากนั้นกรองข้อมูลจากกลุ่มดังกล่าวด้วย HAVING MAX(amount) > 10 ซึ่งจะทำให้แสดงเฉพาะข้อมูลที่ MAX(amount) มีค่ามากกว่า 10