Trong MySQL, lệnh GROUP BY
được sử dụng để nhóm các hàng có cùng giá trị trong một hoặc nhiều cột, và thường được sử dụng cùng với các hàm tổng hợp như COUNT()
, SUM()
, AVG()
, MAX()
, hoặc MIN()
để tính toán giá trị tổng hợp cho mỗi nhóm.
Cú pháp cơ bản của GROUP BY
:
SELECT cot_1, cot_2, ..., aggregate_function(cot_k)
FROM ten_bang
WHERE dieu_kien
GROUP BY cot_1, cot_2, ...;
cot_1
, cot_2
: Cột mà bạn muốn nhóm.
aggregate_function(cot_k)
: Hàm tổng hợp (ví dụ: COUNT
, SUM
, AVG
) áp dụng trên một cột cụ thể.
ten_bang
: Tên bảng.
dieu_kien
: Điều kiện lọc (nếu có).
Ví dụ 1: Đếm số lượng bản ghi theo nhóm
Giả sử bạn có bảng orders
với các cột customer_id
và order_amount
. Bạn muốn đếm số lượng đơn hàng cho mỗi khách hàng.
SELECT customer_id, COUNT(*) AS total_orders
FROM orders
GROUP BY customer_id;
Kết quả: Bạn sẽ nhận được danh sách các khách hàng và số lượng đơn hàng của họ.
Ví dụ 2: Tính tổng giá trị đơn hàng theo nhóm
Giả sử bạn muốn tính tổng giá trị đơn hàng của mỗi khách hàng (customer_id
).
SELECT customer_id, SUM(order_amount) AS total_amount
FROM orders
GROUP BY customer_id;
Kết quả: Bạn sẽ nhận được danh sách mỗi khách hàng với tổng giá trị đơn hàng của họ.
Ví dụ 3: Sử dụng GROUP BY
với nhiều cột
Bạn cũng có thể nhóm theo nhiều cột. Giả sử bạn có bảng sales
với các cột region
(khu vực), product
(sản phẩm), và sales_amount
(doanh thu). Bạn muốn tính tổng doanh thu cho từng sản phẩm theo từng khu vực.
SELECT region, product, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY region, product;
Kết quả: Bạn sẽ nhận được tổng doanh thu cho từng sản phẩm trong từng khu vực.
Ví dụ 4: Sử dụng GROUP BY
với HAVING
Bạn có thể sử dụng HAVING
để lọc các nhóm kết quả sau khi đã áp dụng GROUP BY
. Giả sử bạn muốn chỉ lấy những khách hàng có tổng giá trị đơn hàng lớn hơn 1000.
SELECT customer_id, SUM(order_amount) AS total_amount
FROM orders
GROUP BY customer_id
HAVING total_amount > 1000;
Kết quả: Chỉ những khách hàng có tổng giá trị đơn hàng lớn hơn 1000 sẽ được hiển thị.
Lưu ý:
- Các cột được chọn trong mệnh đề
SELECT
phải nằm trong nhóm GROUP BY
hoặc là một phần của hàm tổng hợp (aggregate function).
HAVING
được sử dụng để lọc các kết quả sau khi GROUP BY
đã thực hiện (khác với WHERE
, lọc trước khi nhóm).
Ví dụ 5: Đếm số lượng đơn hàng và tính giá trị trung bình theo từng ngày
Giả sử bạn có cột order_date
trong bảng orders
và muốn tính tổng số lượng đơn hàng và giá trị trung bình của các đơn hàng theo từng ngày.
SELECT order_date, COUNT(*) AS total_orders, AVG(order_amount) AS avg_order
FROM orders
GROUP BY order_date;
Kết quả: Bạn sẽ nhận được tổng số lượng đơn hàng và giá trị trung bình của các đơn hàng theo ngày.
Lệnh GROUP BY
rất mạnh mẽ trong việc xử lý dữ liệu và tạo các báo cáo tổng hợp từ nhiều nhóm dữ liệu trong MySQL.