Chào mừng bạn tiếp tục hành trình trong chuỗi series tự học SQL cùng MCNA Technology School!
Ở hai buổi học trước, bạn đã nắm vững cách lấy, lọc với WHERE và sắp xếp dữ liệu chi tiết. Tuy nhiên, khi làm báo cáo cho quản lý, câu hỏi thường không phải là “danh sách từng học viên là ai”, mà là “có tổng cộng bao nhiêu học viên”, “điểm trung bình mỗi lớp là bao nhiêu?”.
Bài viết này sẽ giúp bạn làm chủ mệnh đề GROUP BY trong SQL kết hợp các hàm gom nhóm để giải quyết bài toán tính toán tổng hợp này.
1. Các Hàm Gom Nhóm (Aggregate Functions) Phổ Biến
Trước khi gom nhóm, bạn cần biết các hàm tính toán cơ bản trên tập dữ liệu:
-
COUNT(): Đếm số lượng dòng/bản ghi. -
SUM(): Tính tổng giá trị số. -
AVG(): Tính giá trị trung bình. -
MIN()/MAX(): Tìm giá trị nhỏ nhất / lớn nhất.
SQL
-- Tính tổng số học viên toàn trường
SELECT COUNT(MaHV) AS TongHocVien
FROM HocVien;
-- Tính điểm trung bình của tất cả học viên
SELECT AVG(DiemThi) AS DiemTrungBinh
FROM HocVien;
2. Lệnh GROUP BY Trong SQL Dùng Để Làm Gì?
Mệnh đề GROUP BY trong SQL dùng để nhóm các dòng có cùng giá trị ở một hoặc nhiều cột lại với nhau, sau đó áp dụng các hàm gom nhóm (COUNT, SUM, AVG…) trên từng nhóm đó.
Cú pháp cơ bản:
SQL
SELECT cột_gom_nhóm, HÀM_GOM_NHÓM(cột_tính_toán)
FROM tên_bảng
GROUP BY cột_gom_nhóm;
Ví dụ thực tế:
Tính điểm thi trung bình của từng khóa học tại MCNA:
SQL
SELECT KhoaHoc, AVG(DiemThi) AS DiemTrungBinh
FROM HocVien
GROUP BY KhoaHoc;
3. Lọc Kết Quả Gom Nhóm Bằng Mệnh Đề HAVING
Một điểm cần lưu ý khi học SQL cơ bản là sự khác biệt giữa WHERE và HAVING:
-
WHERE: Lọc các dòng dữ liệu cá thể trước khi gom nhóm. -
HAVING: Lọc kết quả của các nhóm sau khi đã sử dụng GROUP BY trong SQL.
Ví dụ:
Chỉ hiển thị những khóa học có điểm trung bình lớn hơn hoặc bằng 8.0:
SQL
SELECT KhoaHoc, AVG(DiemThi) AS DiemTrungBinh
FROM HocVien
GROUP BY KhoaHoc
HAVING AVG(DiemThi) >= 8.0;
4. Thứ Tự Thực Thi Của Một Câu Truy Vấn SQL Chuẩn
Đến bài học này, bạn đã đi qua hầu hết các mệnh đề cơ bản. Hãy ghi nhớ thứ tự chuẩn khi viết một câu lệnh SQL:
-
SELECT(Chọn cột hiển thị) -
FROM(Chỉ định bảng dữ liệu) -
WHERE(Lọc dữ liệu gốc) -
GROUP BY(Gom nhóm) -
HAVING(Lọc nhóm sau tính toán) -
ORDER BY(Sắp xếp kết quả hiển thị)
5. Bài Tập Thực Hành Học SQL
Hãy áp dụng GROUP BY trong SQL để giải bài tập báo cáo nhân sự dưới đây:
Đề bài: Cho bảng
NhanViengồm các cột:MaNV,HoTen,PhongBan,Luong.
Tính tổng quỹ lương (
SUM) của toàn bộ công ty.Đếm số lượng nhân viên và tính mức lương trung bình của từng
PhongBan.Lọc ra các
PhongBancó tổng chi trả lương vượt quá 100,000,000.
SQL
-- Câu 1: Tính tổng quỹ lương công ty
SELECT SUM(Luong) AS TongQuyLuong
FROM NhanVien;
-- Câu 2: Đếm số nhân viên và tính lương trung bình theo phòng ban
SELECT PhongBan, COUNT(MaNV) AS SoNhanVien, AVG(Luong) AS LuongTrungBinh
FROM NhanVien
GROUP BY PhongBan;
-- Câu 3: Lọc các phòng ban có tổng lương > 100,000,000
SELECT PhongBan, SUM(Luong) AS TongLuong
FROM NhanVien
GROUP BY PhongBan
HAVING SUM(Luong) > 100000000;
Tác giả: Huỳnh Trung Hậu
📞 Hotline: 0939.866.825 (Mr. Minh Khang)
🌐 Website: MCNA Technology School
📍 Hà Nội: 30 Trung Liệt, Đống Đa | Liền kề 44B TT2 Văn Quán, Hà Đông
📍 TP.HCM: 50B Phan Tây Hồ, Cầu Kiệu

