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

MySQL รวมแถวที่ ID ซ้ำกัน และหาค่า MAX ของแต่ละคอลัมน์

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

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

1. สร้างตาราง

mysql> CREATE TABLE DemoTable1804 (
    Id INT,
    Marks1 INT,
    Marks2 INT,
    Marks3 INT
);
Query OK, 0 rows affected (0.00 sec)

2. เพิ่มข้อมูล (ID ซ้ำ มีค่า NULL)

mysql> INSERT INTO DemoTable1804 VALUES(1, 56, 89, 34);
mysql> INSERT INTO DemoTable1804 VALUES(1, 98, NULL, 94);
mysql> INSERT INTO DemoTable1804 VALUES(2, 34, 45, 78);
mysql> INSERT INTO DemoTable1804 VALUES(2, NULL, 67, NULL);

3. แสดงข้อมูลเดิม

mysql> SELECT * FROM DemoTable1804;
+------+--------+--------+--------+
| Id   | Marks1 | Marks2 | Marks3 |
+------+--------+--------+--------+
|    1 |     56 |     89 |     34 |
|    1 |     98 |   NULL |     94 |
|    2 |     34 |     45 |     78 |
|    2 |   NULL |     67 |   NULL |
+------+--------+--------+--------+

4. Query: GROUP BY Id, หา MAX ของแต่ละคอลัมน์

mysql> SELECT Id, MAX(Marks1), MAX(Marks2), MAX(Marks3)
    FROM DemoTable1804
    GROUP BY Id;

คำอธิบาย MAX() กับ NULL:

  • MAX() ข้ามค่า NULL อัตโนมัติ (ไม่นับ NULL)
  • Id=1: Marks1 → MAX(56, 98) = 98 | Marks2 → MAX(89, NULL) = 89 | Marks3 → MAX(34, 94) = 94
  • Id=2: Marks1 → MAX(34, NULL) = 34 | Marks2 → MAX(45, 67) = 67 | Marks3 → MAX(78, NULL) = 78

5. ผลลัพธ์

+------+-------------+-------------+-------------+
| Id   | MAX(Marks1) | MAX(Marks2) | MAX(Marks3) |
+------+-------------+-------------+-------------+
|    1 |          98 |          89 |          94 |
|    2 |          34 |          67 |          78 |
+------+-------------+-------------+-------------+

ฟังก์ชันรวม (Aggregate Functions) ที่ข้าม NULL

ฟังก์ชันพฤติกับ NULL
MAX(), MIN()ข้าม NULL
SUM(), AVG()ข้าม NULL
COUNT(col)นับเฉพาะ NOT NULL
COUNT(*)นับทุกแถว (รวม NULL)

สรุป

GROUP BY Id + MAX(col) รวมแถว ID ซ้ำ และหาค่าสูงสุดของแต่ละคอลัมน์ โดยอัตโนมัติข้าม NULL ใช้ได้กับ MIN, SUM, AVG เช่นกัน เหมาะสำหรับ Deduplication และหาค่าสูงสุดต่อกลุ่ม