目次
1. HAVING คืออะไร
HAVING เป็นไวยากรณ์ที่ใช้ใน SQL เพื่อกำหนดเงื่อนไขกับผลลัพธ์การรวมหลังจากทำการจัดกลุ่มข้อมูลโดยทั่วไปจะใช้ร่วมกับคำสั่งGROUP BY
เพื่อทำหน้าที่กรองข้อมูลหลังการสรุปผล การใช้ HAVING ทำให้สามารถดึงเฉพาะกลุ่มที่ตรงตามเกณฑ์ที่กำหนดได้ เช่น หากต้องการดึงข้อมูลลูกค้าที่ยอดขายรวมเกินจำนวนที่กำหนดหรือกลุ่มที่ค่าเฉลี่ยคะแนนเกินระดับที่ตั้งไว้ จะใช้ HAVING แตกต่างจาก WHERE
ที่กำหนดเงื่อนไขต่อแถวก่อนการสรุปผล, HAVING จะนำเงื่อนไขไปใช้กับผลลัพธ์หลังการสรุปตัวอย่างการใช้ HAVING
เช่น คำสั่ง query ที่ดึงลูกค้าที่ยอดขายรวมเกิน 10,000 เยน มีดังนี้SELECT รหัสลูกค้า, SUM(ยอดขาย) AS ยอดขายรวม
FROM ตารางยอดขาย
GROUP BY รหัสลูกค้า
HAVING SUM(ยอดขาย) > 10000;
คำสั่งนี้ใช้ฟังก์ชัน SUM
เพื่อรวมยอดขายของแต่ละลูกค้าและดึงเฉพาะลูกค้าที่ผลลัพธ์เกิน 10,000 เยน2. โครงสร้างพื้นฐานและวิธีใช้ HAVING clause
โครงสร้างพื้นฐานของ HAVING clause มีดังต่อไปนี้。SELECT คอลัมน์, ฟังก์ชันการรวม(คอลัมน์)
FROM ชื่อตาราง
GROUP BY คอลัมน์
HAVING เงื่อนไข;
โครงสร้างนี้จะทำการจัดกลุ่มข้อมูลด้วยคำสั่ง GROUP BY
และกรองผลลัพธ์ที่รวมกันโดยระบุเงื่อนไขด้วยคำสั่ง HAVING
ตัวอย่างเช่น คำสั่ง query ที่ดึงลูกค้าที่มีจำนวนคำสั่งซื้ออย่างน้อย 5 รายการจากตารางขายมีดังต่อไปนี้。SELECT รหัสลูกค้า, COUNT(รหัสคำสั่งซื้อ) AS จำนวนคำสั่งซื้อ
FROM ตารางคำสั่งซื้อ
GROUP BY รหัสลูกค้า
HAVING COUNT(รหัสคำสั่งซื้อ) >= 5;
ที่นี่ใช้ฟังก์ชัน COUNT
เพื่อคำนวณจำนวนคำสั่งซื้อของแต่ละลูกค้า และกรองเฉพาะลูกค้าที่มีจำนวนคำสั่งซื้ออย่างน้อย 5 รายการ。
3. ตัวอย่างการใช้ HAVING
HAVING clause เป็นเครื่องมือที่ช่วยในการวิเคราะห์ข้อมูลขั้นสูงเมื่อใช้ร่วมกับฟังก์ชันการสรุปผล。ต่อไปนี้จะแสดงตัวอย่างการใช้งานที่เป็นรูปธรรมหลายตัวอย่าง。ตัวอย่างที่ 1: การกรองตามยอดขายรวม
เพื่อดึงสินค้าที่ยอดขายเกิน 10,000 เยน ให้ใช้ฟังก์ชันSUM
ดังต่อไปนี้。SELECT รหัสสินค้า, SUM(ยอดขาย) AS ยอดขายรวม
FROM ตารางสินค้า
GROUP BY รหัสสินค้า
HAVING SUM(ยอดขาย) > 10000;
คิวรีนี้คำนวณยอดขายรวมต่อสินค้าแต่ละรายการและดึงสินค้าที่ยอดขายรวมเกิน 10,000 เยน。ตัวอย่างที่ 2: การกรองตามจำนวนคำสั่งซื้อ
หากลูกค้าเฉพาะทำการสั่งซื้อมากกว่า 10 รายการ จะดึงข้อมูลลูกค้านั้น。SELECT รหัสลูกค้า, COUNT(รหัสคำสั่งซื้อ) AS จำนวนคำสั่งซื้อ
FROM ตารางคำสั่งซื้อ
GROUP BY รหัสลูกค้า
HAVING COUNT(รหัสคำสั่งซื้อ) > 10;
คิวรีนี้คำนวณจำนวนการสั่งซื้อต่อแต่ละลูกค้าและดึงเฉพาะลูกค้าที่สั่งซื้อมากกว่า 10 รายการ。4. ความแตกต่างกับ WHERE clause
HAVING clause และ WHERE clause ทั้งสองทำการกรองข้อมูล แต่เวลาที่นำไปใช้แตกต่างกัน。ความแตกต่างของเวลาที่นำไปใช้
- WHERE clause: ถูกนำไปใช้ก่อนการจัดกลุ่มของข้อมูล และทำการกรองแต่ละแถว。
- HAVING clause: ถูกนำไปใช้หลังจากการจัดกลุ่มของข้อมูล และทำการกรองผลลัพธ์การสรุป。
WHERE
clause ก่อน แล้วจึงใช้ HAVING
clause เพื่อดึงผลลัพธ์ที่ยอดขายรวมเกิน 5,000 เยน。SELECT รหัสลูกค้า, SUM(ยอดขาย) AS ยอดขายรวม
FROM ตารางยอดขาย
WHERE ยอดขาย >= 1000
GROUP BY รหัสลูกค้า
HAVING SUM(ยอดขาย) > 5000;
ในคิวรีนี้ จะนำ GROUP BY
และ HAVING
ไปใช้กับข้อมูลที่ถูกกรองด้วย WHERE
clause แล้วดึงเฉพาะลูกค้าที่มียอดขายตั้งแต่ 5,000 เยนขึ้นไป。
5. ข้อควรระวังเมื่อใช้ HAVING clause
จำเป็นต้องใช้ร่วมกับฟังก์ชันการรวม
HAVING clause ทำการกรองผลลัพธ์การรวม ดังนั้นจึงต้องใช้ร่วมกับฟังก์ชันการรวมเช่นSUM
หรือ COUNT
เป็นต้น การกำหนดเงื่อนไขสำหรับแต่ละแถวควรใช้ WHERE clauseการใช้ Alias
ใน HAVING clause สามารถเขียนเงื่อนไขโดยใช้ alias ที่กำหนดด้วยAS
ได้ ตัวอย่างเช่น สามารถกำหนด alias ให้กับยอดขายรวมและใช้ได้ดังต่อไปนี้SELECT รหัสลูกค้า, SUM(ยอดขาย) AS ยอดขายรวม
FROM ตารางยอดขาย
GROUP BY รหัสลูกค้า
HAVING ยอดขายรวม > 10000;
คิวรีนี้จะดึงข้อมูลลูกค้าที่ยอดขายรวมเกิน 10,000 เยน