SQL HAVING: Hướng Dẫn Lọc Dữ Liệu Nhóm Hiệu Quả Bằng Hàm Tổng Hợp

Mệnh đề HAVING trong SQL là một công cụ mạnh mẽ, được sử dụng để lọc các nhóm dữ liệu đã được tạo bởi GROUP BY, dựa trên các điều kiện áp dụng cho kết quả của các hàm tổng hợp (Aggregate Functions). HAVING ra đời vì từ khóa WHERE không thể lọc dữ liệu dựa trên các giá trị được tính toán bởi hàm tổng hợp. Nó cho phép bạn đặt điều kiện trực tiếp lên các nhóm dữ liệu, tinh chỉnh kết quả truy vấn một cách chính xác khi mệnh đề WHERE không đủ khả năng.

Mệnh đề HAVING trong SQL

Cách Sử Dụng Mệnh Đề HAVING trong SQL

Không giống như WHERE lọc các hàng riêng lẻ trước khi nhóm, HAVING lọc các nhóm dữ liệu sau khi GROUP BY đã tổng hợp chúng. Điều này biến HAVING thành công cụ không thể thiếu khi bạn cần áp dụng điều kiện cho các giá trị tổng hợp như COUNT(), SUM(), AVG(), MIN(), MAX().

Cú Pháp HAVING

Mệnh đề HAVING luôn xuất hiện sau GROUP BY và trước ORDER BY trong một câu truy vấn SQL:

SELECT column_name(s)FROM table_nameWHERE condition         -- Lọc hàng trước khi nhómGROUP BY column_name(s)HAVING condition        -- Lọc nhóm sau khi tổng hợpORDER BY column_name(s);

Ví Dụ Minh Họa HAVING

Để hiểu rõ hơn về cách thức hoạt động của HAVING, chúng ta sẽ xem xét các ví dụ với bảng CustomersOrders từ cơ sở dữ liệu mẫu Northwind.

1. Lọc Quốc Gia Dựa Trên Số Lượng Khách Hàng

Ví dụ: Liệt kê số lượng khách hàng ở mỗi quốc gia, chỉ bao gồm các quốc gia có hơn 5 khách hàng.

SELECT COUNT(CustomerID), CountryFROM CustomersGROUP BY CountryHAVING COUNT(CustomerID) > 5;

Ví dụ: Tương tự như trên, nhưng sắp xếp các quốc gia có nhiều khách hàng nhất lên đầu.

SELECT COUNT(CustomerID), CountryFROM CustomersGROUP BY CountryHAVING COUNT(CustomerID) > 5ORDER BY COUNT(CustomerID) DESC;

Tinh chỉnh truy vấn SQL

2. Lọc Nhân Viên Dựa Trên Số Lượng Đơn Hàng (Sử Dụng JOIN)

Ví dụ: Liệt kê các nhân viên đã đăng ký hơn 10 đơn hàng.

SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrdersFROM OrdersINNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeIDGROUP BY Employees.LastNameHAVING COUNT(Orders.OrderID) > 10;

Ví dụ: Kiểm tra xem các nhân viên có họ là “Davolio” hoặc “Fuller” có đăng ký hơn 25 đơn hàng hay không.

SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrdersFROM OrdersINNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeIDWHERE Employees.LastName = 'Davolio' OR Employees.LastName = 'Fuller'GROUP BY Employees.LastNameHAVING COUNT(Orders.OrderID) > 25;

Kết Luận

Mệnh đề HAVING là một công cụ thiết yếu cho phép bạn thực hiện các điều kiện lọc trên dữ liệu đã được nhóm và tổng hợp. Nó giải quyết hạn chế của WHERE khi làm việc với các hàm tổng hợp, giúp bạn truy vấn dữ liệu phức tạp hơn và thu được cái nhìn sâu sắc hơn từ cơ sở dữ liệu của mình. Nắm vững HAVING là chìa khóa để viết các truy vấn SQL mạnh mẽ và hiệu quả trong việc phân tích dữ liệu.

Tài Liệu Tham Khảo

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *