1. HAVING Clause là gì?
HAVING clause là một cú pháp SQL được dùng để áp dụng các điều kiện lên kết quả đã được tổng hợp sau khi dữ liệu đã được nhóm. Nó thường được sử dụng kết hợp với câu lệnh GROUP BY và đóng vai trò lọc dữ liệu sau khi thực hiện tổng hợp. Bằng cách sử dụng HAVING clause, bạn có thể chỉ lấy các nhóm đáp ứng các tiêu chí cụ thể.
Ví dụ, HAVING clause được dùng khi bạn muốn trích xuất các khách hàng có tổng doanh thu vượt quá một mức nhất định hoặc các nhóm có điểm trung bình trên một ngưỡng cụ thể. Trong khi câu lệnh WHERE áp dụng các điều kiện cho từng hàng riêng lẻ trước khi tổng hợp, HAVING clause áp dụng các điều kiện cho kết quả sau khi tổng hợp.
Ví dụ về việc sử dụng HAVING Clause
Ví dụ, truy vấn sau trích xuất các khách hàng có tổng doanh thu vượt quá 10.000.
SELECT customer_id, SUM(sales) AS total_sales
FROM sales_table
GROUP BY customer_id
HAVING SUM(sales) > 10000;
Truy vấn này sử dụng hàm SUM để tính tổng doanh thu cho mỗi khách hàng và chỉ lấy những khách hàng có tổng doanh thu vượt quá 10.000.
2. Cú pháp và cách dùng cơ bản của HAVING Clause
Cú pháp cơ bản của HAVING clause như sau:
SELECT column_name, aggregate_function(column_name)
FROM table_name
GROUP BY column_name
HAVING condition;
Cú pháp này nhóm dữ liệu bằng câu lệnh GROUP BY và lọc các kết quả đã tổng hợp bằng cách chỉ định các điều kiện trong câu lệnh HAVING. Ví dụ, truy vấn sau trích xuất các khách hàng đã đặt ít nhất năm đơn hàng từ bảng orders.
SELECT customer_id, COUNT(order_id) AS order_count
FROM orders_table
GROUP BY customer_id
HAVING COUNT(order_id) >= 5;
Ở đây, hàm COUNT được dùng để đếm số đơn hàng của mỗi khách hàng, và chỉ những khách hàng có năm đơn hàng trở lên mới được lọc.
3. Ứng dụng thực tiễn của HAVING Clause
HAVING clause là một công cụ mạnh mẽ cho việc phân tích dữ liệu nâng cao khi kết hợp với các hàm tổng hợp. Dưới đây là một số ví dụ cụ thể về cách áp dụng nó.
Ví dụ 1: Lọc theo Tổng doanh thu
Để trích xuất các sản phẩm có tổng doanh thu vượt quá 10.000, sử dụng hàm SUM như dưới đây.
SELECT product_id, SUM(sales) AS total_sales
FROM products_table
GROUP BY product_id
HAVING SUM(sales) > 10000;
Truy vấn này tính tổng doanh thu cho mỗi sản phẩm và chỉ lấy những sản phẩm có tổng doanh thu vượt quá 10.000.
Ví dụ 2: Lọc theo Số lượng đơn hàng
Nếu một khách hàng cụ thể đã đặt hơn 10 đơn hàng, trích xuất khách hàng đó như sau.
SELECT customer_id, COUNT(order_id) AS order_count
FROM orders_table
GROUP BY customer_id
HAVING COUNT(order_id) > 10;
Truy vấn này tính số đơn hàng của mỗi khách hàng và chỉ lấy những khách hàng đã đặt hơn 10 đơn hàng.
4. Sự khác biệt giữa HAVING và WHERE
Cả HAVING clause và WHERE clause đều được dùng để lọc dữ liệu, nhưng chúng khác nhau về thời điểm áp dụng.
Sự khác nhau về thời điểm áp dụng
- WHERE clause : Được áp dụng trước khi nhóm và lọc các hàng riêng lẻ.
- HAVING clause : Được áp dụng sau khi nhóm và lọc các kết quả đã tổng hợp.
Ví dụ, trong một truy vấn kết hợp cả WHERE và HAVING, câu lệnh WHERE đầu tiên lọc dữ liệu có doanh thu từ 1.000 trở lên, sau đó câu lệnh HAVING trích xuất các kết quả có tổng doanh thu vượt quá 5.000.
SELECT customer_id, SUM(sales) AS total_sales
FROM sales_table
WHERE sales >= 1000
GROUP BY customer_id
HAVING SUM(sales) > 5000;
Trong truy vấn này, GROUP BY và HAVING được áp dụng lên dữ liệu đã được lọc bởi câu lệnh WHERE, chỉ lấy những khách hàng có tổng doanh thu từ 5.000 trở lên.

5. Lưu ý quan trọng khi sử dụng HAVING Clause
Phải được sử dụng cùng với các hàm tổng hợp
Vì mệnh đề HAVING lọc các kết quả đã tổng hợp, nó phải được sử dụng cùng với các hàm tổng hợp như SUM hoặc COUNT. Đối với các điều kiện áp dụng cho từng hàng riêng lẻ, nên sử dụng mệnh đề WHERE.
Using Aliases
Trong mệnh đề HAVING, bạn có thể viết các điều kiện bằng cách sử dụng bí danh được chỉ định bằng AS. Ví dụ, bạn có thể gán một bí danh cho tổng doanh thu và sử dụng nó trong điều kiện như dưới đây.
SELECT customer_id, SUM(sales) AS total_sales
FROM sales_table
GROUP BY customer_id
HAVING total_sales > 10000;
Truy vấn này trích xuất các khách hàng có tổng doanh thu vượt quá 10.000.
6. Summary: How to Effectively Use the HAVING Clause
Mệnh đề HAVING là một công cụ mạnh mẽ cho phép lọc linh hoạt dữ liệu đã tổng hợp bằng cách áp dụng các điều kiện lên kết quả tóm tắt. Đặc biệt, khi phân tích dữ liệu tổng hợp như tổng doanh thu hoặc số lượng đơn hàng, việc sử dụng mệnh đề HAVING giúp phân tích dữ liệu hiệu quả. Bằng cách hiểu sự khác biệt giữa mệnh đề HAVING và mệnh đề WHERE và sử dụng chúng một cách thích hợp cùng nhau, bạn có thể tối đa hóa tính linh hoạt của các truy vấn SQL của mình.


