Đăng nhập

Bài 21. GROUP BY và hàm tổng hợp: COUNT, SUM, AVG, MAX, MIN

Vì sao cần nhóm và tổng hợp dữ liệu?

Trong thực tế, khi làm việc với cơ sở dữ liệu, bạn không chỉ cần liệt kê từng dòng dữ liệu riêng lẻ mà còn phải trả lời các câu hỏi tổng hợp như:

  • Có bao nhiêu đơn hàng đã bán hôm nay?
  • Tổng doanh thu của từng nhân viên là bao nhiêu?
  • Trung bình điểm của mỗi học sinh trong lớp là bao nhiêu?

Để giải quyết những yêu cầu trên, SQL cung cấp một bộ công cụ rất mạnh: hàm tổng hợp (aggregate functions) kết hợp với GROUP BY. Bài học này sẽ giúp bạn nắm vững kỹ năng nhóm dữ liệu và sử dụng các hàm như COUNT, SUM, AVG, MAX, MIN để khai thác dữ liệu một cách linh hoạt và hiệu quả.


Tổng quan về hàm tổng hợp

HàmMô tả
COUNT()Đếm số lượng dòng
SUM()Tính tổng
AVG()Tính trung bình
MAX()Tìm giá trị lớn nhất
MIN()Tìm giá trị nhỏ nhất

Các hàm này thường được dùng chung với GROUP BY để tính toán dữ liệu theo từng nhóm (như theo lớp, theo nhân viên, theo tháng…).


Câu lệnh GROUP BY – Cách nhóm dữ liệu

Cú pháp:

SELECT cot1, HÀM_TỔNG_HỢP(cot2)
FROM ten_bang
GROUP BY cot1;

Ví dụ: Tính tổng doanh thu của từng nhân viên:

SELECT nhan_vien_id, SUM(doanh_thu) AS tong_doanh_thu
FROM don_hang
GROUP BY nhan_vien_id;

COUNT – Đếm số dòng

SELECT lop, COUNT(*) AS so_hoc_sinh
FROM hoc_sinh
GROUP BY lop;

Kết quả: Số học sinh trong từng lớp.


SUM – Tính tổng

SELECT san_pham_id, SUM(so_luong) AS tong_so_luong
FROM chi_tiet_don_hang
GROUP BY san_pham_id;

Kết quả: Tổng số lượng bán ra của từng sản phẩm.


AVG – Tính trung bình

SELECT hoc_sinh_id, AVG(diem) AS diem_tb
FROM diem_mon
GROUP BY hoc_sinh_id;

Kết quả: Trung bình điểm của mỗi học sinh.


MAX và MIN – Tìm giá trị lớn nhất / nhỏ nhất

SELECT phong, MAX(muc_luong) AS luong_cao_nhat
FROM nhan_vien
GROUP BY phong;
SELECT phong, MIN(muc_luong) AS luong_thap_nhat
FROM nhan_vien
GROUP BY phong;

Kết hợp GROUP BY với WHERE và ORDER BY

Bạn có thể lọc dữ liệu trước khi nhóm hoặc sắp xếp sau khi nhóm:

SELECT phong, AVG(muc_luong) AS tb_luong
FROM nhan_vien
WHERE muc_luong > 5000
GROUP BY phong
ORDER BY tb_luong DESC;

Một số lưu ý quan trọng

  • Trong SELECT, chỉ có các cột nằm trong GROUP BY hoặc cột dùng trong hàm tổng hợp mới được phép xuất hiện.
  • GROUP BY có thể đi kèm nhiều cột, ví dụ: GROUP BY phong, chuc_vu.

Bài tập thực hành

  1. Đếm số lượng đơn hàng mỗi ngày.
  2. Tính tổng điểm của từng học sinh theo môn học.
  3. Tìm doanh thu cao nhất của từng nhân viên.
  4. Tính số lượng sản phẩm bán được theo từng tháng.

Kết luận

GROUP BY và các hàm tổng hợp là một phần thiết yếu trong việc phân tích và báo cáo dữ liệu. Khi bạn nắm vững kỹ năng này, bạn sẽ có thể trả lời rất nhiều câu hỏi mang tính thống kê, tổng hợp trong thực tế.

👉 Trong bài sau, chúng ta sẽ học về HAVING – một mảnh ghép quan trọng thường đi kèm với GROUP BY để lọc dữ liệu sau khi nhóm.

Thảo luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Đăng ký nhận tin mới

Nhận bài học, tài nguyên và cơ hội việc làm qua email hàng tuần.

Chúng tôi cam kết không spam. Bạn có thể hủy bất cứ lúc nào.