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_idorder_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.