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

การรวมค่าตัวเลขตามกลุ่มใน MySQL ด้วย GROUP BY

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

ตัวอย่างการใช้งาน

สร้างตารางคะแนนนักเรียน:

mysql> CREATE TABLE DemoTable1443 (
    -> StudentId INT,
    -> StudentScore INT
    -> );

เพิ่มข้อมูล (นักเรียนแต่ละคนมีหลายคะแนน):

mysql> INSERT INTO DemoTable1443 VALUES (100, 78);
mysql> INSERT INTO DemoTable1443 VALUES (101, 89);
mysql> INSERT INTO DemoTable1443 VALUES (100, 88);
mysql> INSERT INTO DemoTable1443 VALUES (101, 97);

ดูข้อมูล:

mysql> SELECT * FROM DemoTable1443;
+-----------+--------------+
| StudentId | StudentScore |
+-----------+--------------+
|       100 |           78 |
|       101 |           89 |
|       100 |           88 |
|       101 |           97 |
+-----------+--------------+

รวมคะแนนตาม StudentId:

mysql> SELECT StudentId, SUM(StudentScore) FROM DemoTable1443 
    -> GROUP BY StudentId;

ผลลัพธ์:

+-----------+-------------------+
| StudentId | SUM(StudentScore) |
+-----------+-------------------+
|       100 |               166 |
|       101 |               186 |
+-----------+-------------------+

ฟังก์ชันรวมที่ใช้ร่วมกับ GROUP BY

หลักการสำคัญ

  • คอลัมน์ใน SELECT ต้องเป็นคอลัมน์ที่อยู่ใน GROUP BY หรือเป็นฟังก์ชันรวมเท่านั้น
  • MySQL (โหมด default) อนุญาตให้ SELECT คอลัมน์อื่นที่ไม่ได้ GROUP BY แต่ผลลัพธ์อาจไม่แน่นอน (ควรตั้งค่า ONLY_FULL_GROUP_BY)
  • ใช้ HAVING สำหรับกรองหลัง GROUP BY (เช่น HAVING SUM(Score) > 150)

การประยุกต์ใช้

  • ยอดขายตามพนักงาน/สาขา/เดือน
  • คะแนนรวมนักเรียนต่อวิชา/ภาคเรียน
  • จำนวนออเดอร์ต่อลูกค้า
  • สถิติการเข้าชมเว็บไซต์ต่อวัน/ต่อหน้า
ฟังก์ชันคำอธิบาย
SUM()ผลรวม
COUNT()จำนวนแถว
AVG()ค่าเฉลี่ย
MIN() / MAX()ค่าต่ำสุด/สูงสุด
GROUP_CONCAT()รวมค่าข้อความเป็นสตริงเดียว