Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีดึงข้อมูลพร้อม GROUP BY ใน MySQL

จัดกลุ่มและสรุปข้อมูลด้วย GROUP BY และ Aggregate Functions

GROUP BY จัดกลุ่มแถวที่มีค่าเหมือนกันในคอลัมน์ที่ระบุ แล้วใช้ Aggregate Function (SUM, COUNT, AVG, MIN, MAX) คำนวณค่าสรุปต่อกลุ่ม

ตัวอย่างสร้างตารางและข้อมูล

CREATE TABLE DemoTable (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Subject VARCHAR(20),
    Price INT
);

INSERT INTO DemoTable (Subject, Price) VALUES
('MySQL', 456), ('MySQL', 456), ('MongoDB', 56), ('MongoDB', 60), ('Java', 100), ('Java', 130);

ข้อมูลในตาราง

+----+---------+-------+
| Id | Subject | Price |
+----+---------+-------+
| 1  | MySQL   | 456   |
| 2  | MySQL   | 456   |
| 3  | MongoDB | 56    |
| 4  | MongoDB | 60    |
| 5  | Java    | 100   |
| 6  | Java    | 130   |
+----+---------+-------+

คำสั่ง GROUP BY Subject และ SUM(Price)

SELECT SUM(Price) AS Total, Subject 
FROM DemoTable 
GROUP BY Subject;

ผลลัพธ์

+-------+---------+
| Total | Subject |
+-------+---------+
| 912   | MySQL   |
| 116   | MongoDB |
| 230   | Java    |
+-------+---------+

คำอธิบาย:

  • GROUP BY Subject จัดกลุ่ม 3 กลุ่ม: MySQL (2 แถว), MongoDB (2 แถว), Java (2 แถว)
  • SUM(Price) รวมราคาในแต่ละกลุ่ม
  • คอลัมน์ใน SELECT ต้องเป็น: คอลัมน์ใน GROUP BY, หรือ Aggregate Function เท่านั้น (SQL Standard)

ฟังก์ชันสรุปอื่นๆ:

  • COUNT(*) นับจำนวนแถวต่อกลุ่ม
  • AVG(Price) ค่าเฉลี่ย
  • MIN(Price), MAX(Price) ค่าต่ำสุด/สูงสุด
  • GROUP_CONCAT(Price) รวมค่าเป็นสตริง

⚐ SQL Mode ONLY_FULL_GROUP_BY: MySQL 5.7+ เปิดโดยค่าเริ่มต้น ห้าม SELECT คอลัมน์ที่ไม่อยู่ใน GROUP BY และไม่ใช่ Aggregate ต้องปิดโหมดนี้หรือเขียน Query ให้ถูกต้อง