ใน SQL, คำสั่ง HAVING ใช้เพื่อกำหนดเงื่อนไขในการกรองผลลัพธ์หลังจากที่ได้ทำการรวมกลุ่มข้อมูล (GROUP BY) โดย HAVING จะมีการใช้งานคล้ายกับ WHERE แต่ต่างกันที่ WHERE ใช้ก่อนการรวมกลุ่ม (GROUP BY) ส่วน HAVING ใช้หลังจากที่ได้ทำการรวมกลุ่มเรียบร้อยแล้ว นอกจากนี้ HAVING ยังสามารถใช้เพื่อกรองผลลัพธ์ที่ถูกคำนวณโดยฟังก์ชันกลุ่ม เช่น SUM(), COUNT(), AVG(), MAX(), และ MIN() ได้
สร้างตารางข้อมูลตัวอย่าง
SQL
-- สร้างตาราง Sales
CREATE TABLE Sales (
id INT PRIMARY KEY,
product VARCHAR(100),
salesperson VARCHAR(100),
quantity INT,
price DECIMAL(10, 2)
);
-- แทรกข้อมูลตัวอย่างเข้าไปในตาราง Sales
INSERT INTO Sales (id, product, salesperson, quantity, price)
VALUES
(1, 'Product A', 'Alice', 10, 200.00),
(2, 'Product B', 'Bob', 5, 150.00),
(3, 'Product A', 'Charlie', 7, 200.00),
(4, 'Product C', 'Alice', 20, 500.00),
(5, 'Product B', 'Alice', 10, 150.00),
(6, 'Product C', 'Charlie', 15, 500.00);ข้อมูลตัวอย่าง

การใช้งาน HAVING เพื่อกรองผลลัพธ์ตามฟังก์ชันกลุ่ม
ตัวอย่างที่ 1: ค้นหาผลิตภัณฑ์ที่มียอดขายรวม (จำนวนสินค้า) มากกว่า 15
SQL
SELECT product, SUM(quantity) AS total_quantity
FROM Sales
GROUP BY product
HAVING SUM(quantity) > 15;- ใช้คำสั่ง
GROUP BY productเพื่อจัดกลุ่มตามผลิตภัณฑ์ - ใช้ฟังก์ชัน
SUM(quantity)เพื่อรวมจำนวนสินค้าของแต่ละผลิตภัณฑ์ - ใช้
HAVINGเพื่อกรองเฉพาะผลิตภัณฑ์ที่มียอดขายรวมมากกว่า 15
ผลลัพธ์

ตัวอย่างที่ 2: ค้นหาผลิตภัณฑ์ที่มียอดขายรวม (จำนวนสินค้า) มากกว่า 15 และมียอดขายรวมเป็นเงินมากกว่า 3000 บาท
SQL
SELECT product, SUM(quantity) AS total_quantity, SUM(quantity * price) AS total_sales
FROM Sales
GROUP BY product
HAVING SUM(quantity) > 15 AND SUM(quantity * price) > 3000;- ใช้คำสั่ง
GROUP BY productเพื่อจัดกลุ่มตามผลิตภัณฑ์ - ใช้
SUM(quantity * price)เพื่อคำนวณยอดขายรวมเป็นเงิน - ใช้
HAVINGเพื่อตรวจสอบเงื่อนไขทั้งสอง คือ ยอดขายรวมมากกว่า 15 และยอดขายรวมเป็นเงินมากกว่า 3000
ผลลัพธ์

ตัวอย่างที่ 3: ค้นหายอดขายของพนักงานที่มียอดขายรวมเป็นเงินมากกว่า 3000 บาท
SQL
SELECT salesperson, SUM(quantity * price) AS total_sales
FROM Sales
GROUP BY salesperson
HAVING SUM(quantity * price) > 3000;- ใช้คำสั่ง
GROUP BY salespersonเพื่อจัดกลุ่มตามชื่อพนักงานขาย - ใช้
SUM(quantity * price)เพื่อคำนวณยอดขายรวมเป็นเงินสำหรับพนักงานแต่ละคน - ใช้
HAVINGเพื่อตรวจสอบว่าพนักงานคนไหนมียอดขายรวมมากกว่า 3000
ผลลัพธ์

ตัวอย่างที่ 4: ค้นหาพนักงานที่ขายสินค้าชนิดใดชนิดหนึ่งมากกว่า 2 ชิ้นขึ้นไป
SQL
SELECT salesperson, COUNT(product) AS product_count
FROM Sales
GROUP BY salesperson
HAVING COUNT(product) > 2;- ใช้คำสั่ง
GROUP BY salespersonเพื่อจัดกลุ่มตามชื่อพนักงานขาย - ใช้ฟังก์ชัน
COUNT(product)เพื่อคำนวณจำนวนชนิดของสินค้าที่พนักงานแต่ละคนขายได้ - ใช้
HAVINGเพื่อตรวจสอบว่าพนักงานคนไหนขายสินค้าชนิดต่าง ๆ ได้มากกว่า 2 ชิ้น
ผลลัพธ์

สรุป
- คำสั่ง
HAVINGใช้เพื่อกรองผลลัพธ์หลังจากทำการจัดกลุ่มข้อมูล (GROUP BY) HAVINGใช้ร่วมกับฟังก์ชันกลุ่ม เช่นSUM(),COUNT(),AVG(),MAX(), และMIN()- การใช้งาน
HAVINGเหมาะสำหรับการตรวจสอบเงื่อนไขที่เกี่ยวข้องกับข้อมูลที่ถูกรวมกลุ่มแล้ว
