Tìm điểm cao nhất của mỗi sinh viên từ 2 cột điểm với MAX() và GROUP BY
Mỗi sinh viên có nhiều bản ghi (nhiều lần thi), cần tìm max của Marks1 và max của Marks2 riêng biệt.
Tạo bảng và dữ liệu
mysql> create table DemoTable (
StudentEmailId varchar(20),
Marks1 int,
Marks2 int
);
Query OK, 0 rows affected (0.90 sec)
mysql> insert into DemoTable values('John@gmail.com',45,32);
mysql> insert into DemoTable values('John@gmail.com',32,45);
mysql> insert into DemoTable values('Carol@gmail.com',32,45);
mysql> insert into DemoTable values('David@gmail.com',45,32);
Truy vấn MAX riêng cho từng cột điểm
mysql> select StudentEmailId, max(Marks1), max(Marks2)
-> from DemoTable
-> group by StudentEmailId;
Kết quả
+-----------------+-------------+-------------+ | StudentEmailId | max(Marks1) | max(Marks2) | +-----------------+-------------+-------------+ | John@gmail.com | 45 | 45 | | Carol@gmail.com | 32 | 45 | | David@gmail.com | 45 | 32 | +-----------------+-------------+-------------+
Phân tích John@gmail.com:
- Bản ghi 1: Marks1=45, Marks2=32
- Bản ghi 2: Marks1=32, Marks2=45
- MAX(Marks1) = 45, MAX(Marks2) = 45 (từ 2 bản ghi khác nhau)
Lưu ý: Đây là max riêng lẻ từng cột. Nếu cần max tổng thể (max của Marks1 UỐNG Marks2): GREATEST(MAX(Marks1), MAX(Marks2)).
Mở rộng: Thêm COUNT(*) số lần thi, AVG() điểm trung bình.