

Hàm Tổng Hợp và Nhóm Dữ Liệu Trong MySQL: GROUP BY, HAVING
- 08-07-2025
- Toanngo92
- 0 Comments
Hàm tổng hợp (Aggregate Functions) cùng với GROUP BY
và HAVING
— những công cụ rất quan trọng để phân tích dữ liệu dạng tổng hợp trong MySQL, đặc biệt hữu ích trong báo cáo, thống kê.
Mục lục
✅ 1. Các Hàm Tổng Hợp (Aggregate Functions)
Hàm | Chức năng |
---|---|
COUNT() | Đếm số dòng |
SUM() | Tính tổng giá trị số |
AVG() | Tính trung bình |
MIN() | Lấy giá trị nhỏ nhất |
MAX() | Lấy giá trị lớn nhất |
Ví dụ bảng Orders
:
CREATE TABLE Orders (
id INT PRIMARY KEY,
customer VARCHAR(50),
amount DECIMAL(10,2)
);
-- Thêm dữ liệu
INSERT INTO Orders (id, customer, amount) VALUES
(1, 'Nam', 500),
(2, 'Linh', 300),
(3, 'Nam', 200),
(4, 'Hà', 400),
(5, 'Linh', 100);
✅ 2. Sử dụng các hàm tổng hợp
-- Tổng số đơn hàng
SELECT COUNT(*) AS so_don_hang FROM Orders;
-- Tổng doanh thu
SELECT SUM(amount) AS tong_doanh_thu FROM Orders;
-- Doanh thu trung bình
SELECT AVG(amount) AS trung_binh FROM Orders;
-- Đơn hàng cao nhất và thấp nhất
SELECT MAX(amount), MIN(amount) FROM Orders;
✅ 3. Nhóm dữ liệu với GROUP BY
Dùng để nhóm các bản ghi lại theo một hoặc nhiều cột, rồi áp dụng hàm tổng hợp lên từng nhóm.
Ví dụ:
-- Tổng doanh thu theo từng khách hàng
SELECT customer, SUM(amount) AS tong_mua
FROM Orders
GROUP BY customer;
✅ 4. Lọc nhóm bằng HAVING
Lưu ý:
- Dùng
WHERE
để lọc từng dòng trước khi nhóm. - Dùng
HAVING
để lọc sau khi đã nhóm.
Ví dụ:
-- Chỉ hiển thị khách hàng có tổng mua > 400
SELECT customer, SUM(amount) AS tong_mua
FROM Orders
GROUP BY customer
HAVING tong_mua > 400;
✅ 5. Kết hợp GROUP BY
+ ORDER BY
-- Xếp hạng khách hàng theo tổng mua giảm dần
SELECT customer, SUM(amount) AS tong_mua
FROM Orders
GROUP BY customer
ORDER BY tong_mua DESC;
💡 Bài tập thực hành
Giả sử bạn có bảng Students(name, gender, age)
:
Câu hỏi:
- Đếm số sinh viên theo từng giới tính?
- Tính tuổi trung bình theo từng giới tính?
- Lọc nhóm giới tính có tuổi trung bình > 21?
Gợi ý lời giải:
-- 1
SELECT gender, COUNT(*) AS so_luong
FROM Students
GROUP BY gender;
-- 2
SELECT gender, AVG(age) AS tuoi_tb
FROM Students
GROUP BY gender;
-- 3
SELECT gender, AVG(age) AS tuoi_tb
FROM Students
GROUP BY gender
HAVING tuoi_tb > 21;
📘 Kết Luận
GROUP BY
giúp gom nhóm dữ liệu theo một tiêu chí (ví dụ theo khách hàng, giới tính…)- Các hàm tổng hợp giúp tóm tắt dữ liệu dạng thống kê.
HAVING
là công cụ mạnh để lọc kết quả sau khiGROUP BY
.