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àm | Mô 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 trongGROUP 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
- Đếm số lượng đơn hàng mỗi ngày.
- Tính tổng điểm của từng học sinh theo môn học.
- Tìm doanh thu cao nhất của từng nhân viên.
- 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