วิธีใช้ HAVING ใน MySQL | ความแตกต่างกับ WHERE และตัวอย่างคิวรี

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 จะทำการกรองข้อมูลที่ยอดขายมากกว่าหรือเท่ากับ 1,000 เยนด้วย 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 เยน

6. สรุป: วิธีใช้ HAVING clause

HAVING clause เป็นเครื่องมือที่ทรงพลังสำหรับการกรองข้อมูลอย่างยืดหยุ่นโดยใส่เงื่อนไขกับข้อมูลสรุป. โดยเฉพาะอย่างยิ่งเมื่อวิเคราะห์ข้อมูลสรุปเช่นยอดขายหรือจำนวนคำสั่งซื้อ การใช้ HAVING clause จะทำให้การวิเคราะห์ข้อมูลมีประสิทธิภาพมากขึ้น. เมื่อเข้าใจความแตกต่างกับ WHERE clause และใช้ร่วมกันอย่างเหมาะสม จะช่วยดึงศักยภาพสูงสุดของความยืดหยุ่นใน SQL query.