Gom Nhóm Dữ Liệu Với GROUP BY & Các Hàm Tính Toán Aggregate

2f4da95a-5ec0-462a-99fd-fb007725b2f7

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 WHEREHAVING:

  • 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:

  1. SELECT (Chọn cột hiển thị)

  2. FROM (Chỉ định bảng dữ liệu)

  3. WHERE (Lọc dữ liệu gốc)

  4. GROUP BY (Gom nhóm)

  5. HAVING (Lọc nhóm sau tính toán)

  6. 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 NhanVien gồm các cột: MaNV, HoTen, PhongBan, Luong.

  1. Tính tổng quỹ lương (SUM) của toàn bộ công ty.

  2. Đếm số lượng nhân viên và tính mức lương trung bình của từng PhongBan.

  3. Lọc ra các PhongBan có 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

Chỉ mục