คำสั่ง GROUP BY ใน SQL ใช้เพื่อจัดกลุ่มข้อมูลตามค่าของคอลัมน์ที่เราต้องการสรุปผล โดยจะทำงานร่วมกับฟังก์ชันแบบกลุ่ม (aggregate functions) เช่น COUNT(), SUM(), AVG(), MAX(), และ MIN() เพื่อสรุปค่าภายในกลุ่มที่ถูกจัดตามคอลัมน์นั้นๆ
สร้างฐานข้อมูลตัวอย่าง
สร้างตารางชื่อว่า Sales ซึ่งมีข้อมูลการขายสินค้า ประกอบด้วย
SaleID: หมายเลขประจำรายการขาย (Primary Key)Product: ชื่อสินค้าQuantity: จำนวนสินค้าที่ขายได้Price: ราคาต่อหน่วยSaleDate: วันที่ขายสินค้า
CREATE TABLE Sales (
SaleID INT PRIMARY KEY,
Product VARCHAR(50),
Quantity INT,
Price DECIMAL(10, 2),
SaleDate DATE
);ใส่ข้อมูลตัวอย่างลงในตาราง Sales ดังนี้
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: สรุปยอดขายสินค้าแต่ละรายการ (รวมจำนวนสินค้าที่ขายได้)
SELECT Product, SUM(Quantity) AS TotalQuantity
FROM Sales
GROUP BY Product;SELECT Product, SUM(Quantity): เลือกคอลัมน์Productและสรุปผลรวมจำนวนสินค้า (SUM(Quantity))GROUP BY Product: จัดกลุ่มตามประเภทสินค้า

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

การใช้ GROUP BY หลายคอลัมน์
เราสามารถใช้ GROUP BY หลายคอลัมน์เพื่อจัดกลุ่มข้อมูลที่ละเอียดขึ้น ตัวอย่างเช่น หากเราต้องการสรุปยอดขายสินค้าตามเดือน
ตัวอย่าง 3: สรุปยอดขายสินค้าแต่ละเดือน
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
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: เรียงลำดับสินค้าตามยอดขายรวม
SELECT Product, SUM(Quantity) AS TotalQuantity
FROM Sales
GROUP BY Product
ORDER BY TotalQuantity DESC;ORDER BY TotalQuantity DESC: จัดเรียงยอดขายรวมจากมากไปน้อย

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