Để tính tổng giá trị cho mỗi nhóm (ví dụ: tổng điểm mỗi học sinh) và sắp xếp kết quả theo tổng giảm dần, kết hợp GROUP BY, SUM() và ORDER BY alias.
Cú pháp
SELECT cot_nhom, SUM(cot_tinh_tong) AS ten_alias FROM ten_bang GROUP BY cot_nhom ORDER BY ten_alias DESC;
Ví dụ minh họa
Tạo bảng điểm:
mysql> CREATE TABLE DemoTable1499 (
-> StudentName VARCHAR(20),
-> StudentMarks INT
-> );
Chèn dữ liệu (Chris, David, Bob mỗi người 2 lần thi):
mysql> INSERT INTO DemoTable1499 VALUES
-> ('Chris', 56), ('David', 78), ('Bob', 98),
-> ('Chris', 45), ('David', 98), ('Bob', 58);
Truy vấn tổng điểm và sắp xếp giảm dần:
mysql> SELECT StudentName, SUM(StudentMarks) AS TotalSum
-> FROM DemoTable1499
-> GROUP BY StudentName
-> ORDER BY TotalSum DESC;
Kết quả:
+-------------+----------+ | StudentName | TotalSum | +-------------+----------+ | David | 176 | | Bob | 156 | | Chris | 101 | +-------------+----------+
Giải thích
GROUP BY StudentName: gom hàng theo tên.SUM(StudentMarks): tính tổng điểm mỗi nhóm.AS TotalSum: đặt alias cho cột tổng.ORDER BY TotalSum DESC: sắp xếp theo alias giảm dần (MySQL cho phép dùng alias trong ORDER BY).
Mở rộng
- Thêm
HAVING TotalSum > 150để lọc nhóm sau khi gom. - Dùng
WITH ROLLUPđể có hàng tổng cộng cuối cùng. - Index trên
(StudentName, StudentMarks)hỗ trợ covering index cho truy vấn này.