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

MySQL SUM และ ORDER BY: ผลรวมคะแนนต่อคน เรียงจากมากไปน้อย

GROUP BY + SUM() + ORDER BY: สรุปและเรียงลำดับ

รวมแถวที่มี StudentName เดียวกัน คำนวณ SUM(StudentMarks) แล้วเรียงจากคะแนนรวมมากไปน้อย

สร้างตารางและข้อมูล

mysql> CREATE TABLE DemoTable1499 (
    -> StudentName VARCHAR(20),
    -> StudentMarks INT
    -> );
Query OK, 0 rows affected (0.46 sec)

mysql> INSERT INTO DemoTable1499 VALUES
    -> ('Chris', 56), ('David', 78), ('Bob', 98),
    -> ('Chris', 45), ('David', 98), ('Bob', 58);
Query OK, 6 rows affected

ข้อมูลก่อนจัดกลุ่ม

+-------------+--------------+
| StudentName | StudentMarks |
+-------------+--------------+
| Chris       |           56 |
| David       |           78 |
| Bob         |           98 |
| Chris       |           45 |
| David       |           98 |
| Bob         |           58 |
+-------------+--------------+

คำสั่ง: SUM แล้ว ORDER BY ผลรวม DESC

mysql> SELECT StudentName, SUM(StudentMarks) AS TotalSum
    -> FROM DemoTable1499
    -> GROUP BY StudentName
    -> ORDER BY TotalSum DESC;

ผลลัพธ์

+-------------+----------+
| StudentName | TotalSum |
+-------------+----------+
| David       |      176 |
| Bob         |      156 |
| Chris       |      101 |
+-------------+----------+

คำอธิบาย

  • GROUP BY StudentName - จัดกลุ่มแถวที่ชื่อเดียวกัน
  • SUM(StudentMarks) - คำนวณผลรวมในแต่ละกลุ่ม
  • AS TotalSum - ตั้ง Alias ให้คอลัมน์ผลรวม
  • ORDER BY TotalSum DESC - เรียงตาม Alias (MySQL อนุญาต) จากมากไปน้อย

ขยาย: เพิ่มเงื่อนไข HAVING (กรองหลัง GROUP BY)

SELECT StudentName, SUM(StudentMarks) AS TotalSum
FROM DemoTable1499
GROUP BY StudentName
HAVING TotalSum > 120
ORDER BY TotalSum DESC;

ผลลัพธ์ (เฉพาะ David และ Bob)

+-------------+----------+
| StudentName | TotalSum |
+-------------+----------+
| David       |      176 |
| Bob         |      156 |
+-------------+----------+

สรุปลำดับการประมวลผล SQL

  1. FROM / JOIN
  2. WHERE (Filter แถวเดี่ยว)
  3. GROUP BY
  4. HAVING (Filter กลุ่ม)
  5. SELECT (คำนวณ Aggregate, Alias)
  6. ORDER BY (เรียง - ใช้ Alias ได้)
  7. LIMIT