SQL การใช้งาน GROUP BY Statement

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

สร้างฐานข้อมูลตัวอย่าง

สร้างตารางชื่อว่า Sales ซึ่งมีข้อมูลการขายสินค้า ประกอบด้วย

  • SaleID: หมายเลขประจำรายการขาย (Primary Key)
  • Product: ชื่อสินค้า
  • Quantity: จำนวนสินค้าที่ขายได้
  • Price: ราคาต่อหน่วย
  • SaleDate: วันที่ขายสินค้า
SQL
CREATE TABLE Sales (
    SaleID INT PRIMARY KEY,
    Product VARCHAR(50),
    Quantity INT,
    Price DECIMAL(10, 2),
    SaleDate DATE
);

ใส่ข้อมูลตัวอย่างลงในตาราง Sales ดังนี้

SQL
INSERT INTO Sales (SaleID, Product, Quantity, Price, SaleDate)
VALUES 
(1, 'Laptop', 2, 1500.00, '2024-01-10'),
(2, 'Smartphone', 3, 800.00, '2024-01-12'),
(3, 'Laptop', 1, 1500.00, '2024-01-15'),
(4, 'Tablet', 5, 400.00, '2024-02-10'),
(5, 'Smartphone', 1, 800.00, '2024-02-12'),
(6, 'Laptop', 2, 1500.00, '2024-03-05'),
(7, 'Tablet', 3, 400.00, '2024-03-08');

การใช้ GROUP BY แบบพื้นฐาน

การใช้ GROUP BY แบบพื้นฐานจะจัดกลุ่มตามคอลัมน์ที่กำหนด เช่น ถ้าเราต้องการหายอดขายรวม (SUM()) ของสินค้าแต่ละรายการ เราจะใช้คำสั่ง GROUP BY ดังนี้

ตัวอย่าง 1: สรุปยอดขายสินค้าแต่ละรายการ (รวมจำนวนสินค้าที่ขายได้)

SQL
SELECT Product, SUM(Quantity) AS TotalQuantity
FROM Sales
GROUP BY Product;
  • SELECT Product, SUM(Quantity): เลือกคอลัมน์ Product และสรุปผลรวมจำนวนสินค้า (SUM(Quantity))
  • GROUP BY Product: จัดกลุ่มตามประเภทสินค้า

ตัวอย่าง 2: สรุปราคารวมของสินค้าที่ขายได้ในแต่ละกลุ่ม

SQL
SELECT Product, SUM(Price * Quantity) AS TotalSales
FROM Sales
GROUP BY Product;
  • SUM(Price * Quantity): คำนวณราคารวมต่อจำนวนที่ขายได้ (ผลรวมของราคาสินค้าแต่ละรายการ)
  • GROUP BY Product: จัดกลุ่มตามประเภทสินค้า

การใช้ GROUP BY หลายคอลัมน์

เราสามารถใช้ GROUP BY หลายคอลัมน์เพื่อจัดกลุ่มข้อมูลที่ละเอียดขึ้น ตัวอย่างเช่น หากเราต้องการสรุปยอดขายสินค้าตามเดือน

ตัวอย่าง 3: สรุปยอดขายสินค้าแต่ละเดือน

SQL
SELECT Product, MONTH(SaleDate) AS SaleMonth, SUM(Quantity) AS TotalQuantity
FROM Sales
GROUP BY Product, MONTH(SaleDate);
  • MONTH(SaleDate): ดึงค่าเดือนจากวันที่
  • GROUP BY Product, MONTH(SaleDate): จัดกลุ่มตามสินค้าและเดือนที่ขาย

การใช้ HAVING ร่วมกับ GROUP BY

HAVING ใช้เพื่อกรองผลลัพธ์หลังจากที่ได้ทำการจัดกลุ่มแล้ว โดยจะใช้คล้ายกับ WHERE แต่จะใช้สำหรับฟังก์ชันสรุปผล เช่น ถ้าเราต้องการดูเฉพาะสินค้าที่มียอดขายรวมมากกว่า 4

ตัวอย่าง 4: สรุปยอดขายสินค้าที่มียอดขายเกิน 4

SQL
SELECT Product, SUM(Quantity) AS TotalQuantity
FROM Sales
GROUP BY Product
HAVING SUM(Quantity) > 4;
  • HAVING SUM(Quantity) > 4: แสดงเฉพาะสินค้าที่มียอดขายรวมมากกว่า 4 หน่วย

การใช้ ORDER BY ร่วมกับ GROUP BY

สามารถใช้ ORDER BY เพื่อจัดเรียงผลลัพธ์หลังจากการจัดกลุ่ม ตัวอย่างเช่น ถ้าเราต้องการเรียงสินค้าตามยอดขายรวมจากมากไปน้อย

ตัวอย่าง 5: เรียงลำดับสินค้าตามยอดขายรวม

SQL
SELECT Product, SUM(Quantity) AS TotalQuantity
FROM Sales
GROUP BY Product
ORDER BY TotalQuantity DESC;
  • ORDER BY TotalQuantity DESC: จัดเรียงยอดขายรวมจากมากไปน้อย

สรุป

คำสั่ง GROUP BY ใช้สำหรับการจัดกลุ่มข้อมูลและสรุปผลฟังก์ชันแบบกลุ่ม การใช้งานสามารถปรับแต่งได้ตามสถานการณ์ ไม่ว่าจะเป็นการสรุปยอดขาย, การกรองผลลัพธ์ด้วย HAVING หรือการจัดเรียงผลลัพธ์ด้วย ORDER BY

แชร์เรื่องนี้