SQL การใช้งาน HAVING Clause

ใน 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 เหมาะสำหรับการตรวจสอบเงื่อนไขที่เกี่ยวข้องกับข้อมูลที่ถูกรวมกลุ่มแล้ว
แชร์เรื่องนี้