Trong MySQL, bạn có thể nhóm một tập dữ liệu dựa trên một hoặc nhiều cột và áp dụng các hàm tổng hợp (như COUNT()
, SUM()
, AVG()
, MAX()
, MIN()
) trên mỗi nhóm. Điều này được thực hiện sử dụng từ khóa GROUP BY
trong câu lệnh SELECT
.
Cú pháp cơ bản:
SELECT column_name1, aggregate_function(column_name2)
FROM table_name
GROUP BY column_name1;
Trong đó column_name1
là cột bạn muốn nhóm dữ liệu, aggregate_function(column_name2)
là hàm tổng hợp bạn muốn áp dụng cho mỗi nhóm.
Ví dụ:
Giả sử bạn có bảng don_hang
với cột thanh_pho
(thành phố nơi đặt hàng) và tong_tien
(tổng tiền của mỗi đơn hàng). Để tính tổng tiền đơn hàng cho mỗi thành phố, bạn có thể sử dụng:
SELECT thanh_pho, SUM(tong_tien) AS tong_tien_theo_thanh_pho
FROM don_hang
GROUP BY thanh_pho;
Trong truy vấn này, GROUP BY thanh_pho
chỉ định rằng kết quả sẽ được nhóm theo cột thanh_pho
, và SUM(tong_tien)
tính tổng giá trị tong_tien
cho mỗi nhóm thanh_pho
.
Sử dụng hàm tổng hợp với GROUP BY
:
- COUNT(): Đếm số lượng hàng trong mỗi nhóm.
- SUM(): Tính tổng giá trị của một cột trong mỗi nhóm.
- AVG(): Tính giá trị trung bình của một cột trong mỗi nhóm.
- MAX(): Tìm giá trị lớn nhất của một cột trong mỗi nhóm.
- MIN(): Tìm giá trị nhỏ nhất của một cột trong mỗi nhóm.
Lưu ý:
Khi sử dụng GROUP BY
, mọi cột trong câu lệnh SELECT
không được bao gồm trong một hàm tổng hợp phải được liệt kê trong GROUP BY
.
Nếu bạn muốn lọc nhóm dữ liệu dựa trên một tiêu chí nhất định (ví dụ: các nhóm có tổng tiền lớn hơn một giá trị cụ thể), bạn có thể sử dụng HAVING
sau GROUP BY
để áp dụng điều kiện lọc cho các nhóm:
SELECT thanh_pho, SUM(tong_tien) AS tong_tien_theo_thanh_pho
FROM don_hang
GROUP BY thanh_pho
HAVING SUM(tong_tien) > 10000;
Trong ví dụ này, chỉ các thành phố có tổng tiền đơn hàng lớn hơn 10.000 sẽ được hiển thị trong kết quả.
Comments