Tìm hiểu mệnh đề HAVING trong MySQL
Trong MySQL, mệnh đề HAVING được sử dụng để áp dụng điều kiện lọc trên các nhóm kết quả được nhóm bởi câu lệnh GROUP BY trong một câu lệnh SELECT. HAVING tương tự như WHERE, nhưng nó áp dụng cho các nhóm dữ liệu (grouped data), trong khi WHERE áp dụng cho từng dòng dữ liệu.
Cú pháp của HAVING trong MySQL#
Cú pháp chung của câu lệnh sử dụng HAVING như sau:
SELECT column1, column2, ... FROM table_name WHERE conditions GROUP BY column1, column2, ... HAVING conditions;
Trong đó:
column1, column2, ...: là các cột bạn muốn lựa chọn.table_name: là tên của bảng bạn muốn truy vấn.conditions: là điều kiện để lọc dữ liệu, được áp dụng vớiWHEREcho từng dòng vàHAVINGcho các nhóm.GROUP BY column1, column2, ...: là mệnh đề nhóm dữ liệu theo các cột được chỉ định.HAVING conditions: là điều kiện áp dụng lên các nhóm kết quả sau khi đã nhóm bởiGROUP BY.
Ví dụ về sử dụng HAVING trong MySQL#
Ví dụ 1: Lọc các nhóm có tổng lớn hơn một giá trị nhất định
Giả sử bạn có một bảng orders với các cột customer_id và total_amount, và bạn muốn tìm tất cả các khách hàng có tổng số tiền đặt hàng lớn hơn 1000:
SELECT customer_id, SUM(total_amount) AS total_spent FROM orders GROUP BY customer_id HAVING SUM(total_amount) > 1000;
Trong trường hợp này:
Câu lệnh
GROUP BY customer_idnhóm các dòng dữ liệu theocustomer_id.HAVING SUM(total_amount) > 1000lọc ra các nhóm có tổngtotal_amountlớn hơn 1000.
Ví dụ 2: Lọc các nhóm có điều kiện kết hợp
Bạn muốn tìm tất cả các tổng đơn hàng lớn hơn 500 và có hơn 2 đơn hàng từ một khách hàng:
SELECT customer_id, COUNT(*) AS order_count, SUM(total_amount) AS total_spent FROM orders GROUP BY customer_id HAVING SUM(total_amount) > 500 AND COUNT(*) > 2;
Trong trường hợp này:
GROUP BY customer_idnhóm các đơn hàng theocustomer_id.HAVING SUM(total_amount) > 500 AND COUNT(*) > 2lọc ra các nhóm có tổngtotal_amountlớn hơn 500 và có hơn 2 đơn hàng.
Điểm khác biệt giữa WHERE và HAVING trong MySQL#
WHERE: Áp dụng điều kiện cho từng dòng dữ liệu trước khi nhóm.
HAVING: Áp dụng điều kiện cho các nhóm sau khi đã nhóm bởi
GROUP BY.
Do đó, bạn chỉ có thể sử dụng HAVING sau khi đã sử dụng GROUP BY. HAVING thường được sử dụng để lọc và áp dụng các điều kiện cho các nhóm kết quả trong các truy vấn phức tạp có sử dụng GROUP BY.