TopDev

Tìm hiểu mệnh đề HAVING trong MySQL

minhdev 📖 2 phút đọc

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ới WHERE cho từng dòng và HAVING cho 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ởi GROUP 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_idtotal_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_id nhóm các dòng dữ liệu theo customer_id.

  • HAVING SUM(total_amount) > 1000 lọc ra các nhóm có tổng total_amount lớ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_id nhóm các đơn hàng theo customer_id.

  • HAVING SUM(total_amount) > 500 AND COUNT(*) > 2 lọc ra các nhóm có tổng total_amount lớ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.

Bài liên quan trong #Database

✓ Đã sao chép link