
Khi làm việc với cơ sở dữ liệu, bạn thường dùng câu lệnh SELECT để truy vấn dữ liệu. Trong đó, WHERE giúp lọc các dòng dữ liệu trước khi nhóm lại. Tuy nhiên, khi bạn muốn lọc các nhóm dữ liệu sau khi đã sử dụng GROUP BY, bạn cần dùng đến câu lệnh HAVING.
HAVING là gì?

HAVING là mệnh đề trong SQL dùng để lọc các nhóm dữ liệu sau khi đã được nhóm bằng GROUP BY. Nó tương tự như WHERE nhưng hoạt động trên nhóm (tập hợp) thay vì từng dòng dữ liệu riêng lẻ.
Nói cách khác, WHERE lọc trước khi nhóm, còn HAVING lọc sau khi nhóm.
Cú pháp cơ bản của HAVING

Ví dụ minh họa 1:
Giả sử bạn có bảng DonHang với các cột: MaKH (Mã khách hàng), SoTien (Số tiền đơn hàng).
Bạn muốn biết những khách hàng nào đã có tổng số tiền đặt hàng lớn hơn 10 triệu.
- GROUP BY MaKH nhóm các đơn hàng theo từng khách hàng.
- SUM(SoTien) tính tổng tiền mỗi khách hàng đã chi.
- HAVING SUM(SoTien) > 10000000 lọc chỉ lấy các nhóm khách hàng có tổng tiền lớn hơn 10 triệu.
Ví dụ minh họa 2:
Bạn muốn biết các sản phẩm có số lượng đơn hàng từ 50 trở lên.
Khi nào dùng HAVING?
- Khi bạn sử dụng GROUP BY để nhóm dữ liệu.
- Muốn lọc kết quả dựa trên điều kiện của nhóm, như tổng, trung bình, đếm số lượng, …
- Không thể dùng WHERE để lọc điều kiện trên các hàm tổng hợp (SUM, COUNT, AVG…) vì WHERE áp dụng trước khi nhóm.
So sánh WHERE và HAVING
Đặc điểm | WHERE | HAVING |
Lọc dữ liệu trước nhóm | Có | Không |
Lọc dữ liệu sau nhóm | Không | Có |
Áp dụng cho | Các dòng dữ liệu đơn lẻ | Các nhóm dữ liệu sau khi nhóm |
Có thể dùng với hàm tổng hợp? | Không | Có |
Kết luận
HAVING là công cụ hữu ích khi làm việc với dữ liệu nhóm trong SQL Server. Nó giúp bạn lọc nhóm dựa trên các điều kiện tổng hợp mà WHERE không thể làm được. Hiểu và vận dụng tốt HAVING sẽ giúp bạn viết các truy vấn tổng hợp hiệu quả và chính xác hơn.