Đăng nhập

Bài 22. HAVING – lọc sau GROUP BY

Trong SQL, chúng ta đã học cách sử dụng GROUP BY để nhóm dữ liệu và áp dụng các hàm tổng hợp như COUNT, SUM, AVG, v.v. Tuy nhiên, có lúc bạn sẽ cần lọc kết quả sau khi đã nhóm – chẳng hạn, chỉ lấy những nhóm có tổng lớn hơn một giá trị nào đó. Đây là lúc chúng ta cần đến câu lệnh HAVING.

Câu lệnh WHERE không thể dùng để lọc kết quả nhóm vì nó chạy trước GROUP BY. Thay vào đó, HAVING được dùng để lọc sau khi dữ liệu đã được nhóm.


Sự khác nhau giữa WHEREHAVING

Tiêu chíWHEREHAVING
Thời điểm lọcTrước khi nhóm (GROUP BY)Sau khi nhóm (GROUP BY)
Dùng vớiCột thông thườngHàm tổng hợp hoặc nhóm

Ví dụ:

Giả sử ta có bảng orders như sau:

idcustomer_idamount
11100
21200
32150
42300
5380

Cú pháp của HAVING

SELECT column1, aggregate_function(column2)
FROM table
GROUP BY column1
HAVING condition;

Ví dụ thực tế với HAVING

Mục tiêu: Tìm những khách hàng có tổng số tiền đặt hàng lớn hơn 250.

SELECT customer_id, SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 250;

Kết quả:

customer_idtotal_amount
1300
2450

Khách hàng số 3 không được liệt kê vì tổng đơn hàng chỉ là 80.


Kết hợp WHEREHAVING

Bạn có thể dùng cả hai khi cần lọc trước và sau khi nhóm.

SELECT customer_id, SUM(amount) AS total_amount
FROM orders
WHERE amount >= 100
GROUP BY customer_id
HAVING SUM(amount) > 250;

Ở ví dụ trên:

  • WHERE amount >= 100: chỉ xét các đơn hàng từ 100 trở lên.
  • HAVING: lọc tổng sau khi đã nhóm.

Một số lưu ý

  • HAVING chỉ nên dùng khi bạn cần lọc sau khi nhóm (GROUP BY). Nếu không nhóm thì dùng WHERE.
  • Có thể sử dụng các hàm tổng hợp trong HAVING: COUNT(), SUM(), AVG(), MAX(), MIN().
  • Khi kết hợp với JOIN, hãy xác định rõ điều kiện lọc ở đâu để tránh nhầm lẫn.

Tổng kết

HAVING là công cụ cực kỳ quan trọng khi làm việc với dữ liệu nhóm. Nó cho phép bạn kiểm soát kỹ hơn những gì hiển thị sau khi tính toán tổng, trung bình hoặc đếm. Nắm vững HAVING sẽ giúp bạn thực hiện các truy vấn thống kê và báo cáo chính xác hơn.

Thảo 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 *

Đăng ký nhận tin mới

Nhận bài học, tài nguyên và cơ hội việc làm qua email hàng tuần.

Chúng tôi cam kết không spam. Bạn có thể hủy bất cứ lúc nào.