Cách sử dụng HAVING trong MySQL

10/06/2023 - lượt xem
Chia sẻ
 
Rate this post

Trong bài viết này, bạn sẽ học cách sử dụng mệnh đề HAVING MySQL để chỉ định điều kiện lọc cho các nhóm hàng hoặc tập hợp.

Giới thiệu về mệnh đề HAVING trong MySQL

Mệnh đề HAVING được sử dụng trong câu lệnh SELECT để chỉ định các điều kiện lọc cho một nhóm hàng hoặc tập hợp.

Mệnh HAVINGđề thường được dùng với mệnh đề GROUP BY lọc nhóm dựa trên một điều kiện xác định. Nếu bạn bỏ qua mệnh đề GROUP BY, mệnh đề HAVING sẽ hoạt động giống như mệnh đề WHERE.

Sau đây minh họa cú pháp của mệnh đề HAVING:

SELECT 
    select_list
FROM 
    table_name
WHERE 
    search_condition
GROUP BY 
    group_by_expression
HAVING 
    group_condition;

Trong cú pháp này, bạn chỉ định một điều kiện trong mệnh đề HAVING.

Mệnh đề HAVING đánh giá từng nhóm được trả về bởi mệnh đề GROUP BY. Nếu kết quả là đúng, thì hàng đó được bao gồm trong tập hợp kết quả.

Lưu ý rằng mệnh đề HAVING áp dụng điều kiện lọc cho từng nhóm hàng, trong khi WHEREmệnh đề áp dụng điều kiện lọc cho từng hàng riêng lẻ.

MySQL đánh giá mệnh đề HAVING sau mệnh đề FROMWHERESELECT và GROUP BYvà trước mệnh đề ORDER BY, và LIMIT:

Lưu ý rằng tiêu chuẩn SQL chỉ định rằng mệnh  đề HAVING được đánh giá trước  SELECT và sau mệnh đề GROUP BY.

Các ví dụ về mệnh đề HAVING trong MySQL

Hãy lấy một số ví dụ về việc sử dụng mệnh đề HAVING để xem nó hoạt động như thế nào. Chúng tôi sẽ sử dụng bảng orderdetails trong cơ sở dữ liệu mẫu để minh họa.

Sau đây sử dụng mệnh đề GROUP BY để lấy số đơn đặt hàng, số lượng mặt hàng được bán trên mỗi đơn hàng và tổng doanh số cho mỗi mặt hàng từ bảng orderdetails:

SELECT 
    ordernumber,
    SUM(quantityOrdered) AS itemsCount,
    SUM(priceeach*quantityOrdered) AS total
FROM
    orderdetails
GROUP BY ordernumber;

Kết quả:

Bây giờ, bạn có thể tìm đơn hàng nào có tổng doanh số lớn hơn 1000 bằng cách sử dụng mệnh đề HAVING như sau:

SELECT 
    ordernumber,
    SUM(quantityOrdered) AS itemsCount,
    SUM(priceeach*quantityOrdered) AS total
FROM
    orderdetails
GROUP BY 
   ordernumber
HAVING 
   total > 1000;

Kết quả:

Có thể hình thành một điều kiện phức tạp trong mệnh đề HAVING bằng cách sử dụng các toán tử logic như OR và AND.

Ví dụ sau sử dụng mệnh đề HAVING để tìm các đơn đặt hàng có tổng số tiền lớn hơn 1000 và chứa nhiều hơn 600 các mặt hàng:

SELECT 
    ordernumber,
    SUM(quantityOrdered) AS itemsCount,
    SUM(priceeach*quantityOrdered) AS total
FROM
    orderdetails
GROUP BY ordernumber
HAVING 
    total > 1000 AND 
    itemsCount > 600;

Kết quả:

Giả sử bạn muốn tìm tất cả các đơn đặt hàng đã được giao và có tổng số tiền lớn hơn 1500, bạn có thể JOIN bảng orderdetails với bảng orders bằng cách sử dụng mệnh đề INNER JOIN và áp dụng một điều kiện trên cột status và total tổng hợp như trong truy vấn sau:

SELECT 
    a.ordernumber, 
    status, 
    SUM(priceeach*quantityOrdered) total
FROM
    orderdetails a
INNER JOIN orders b 
    ON b.ordernumber = a.ordernumber
GROUP BY  
    ordernumber, 
    status
HAVING 
    status = 'Shipped' AND 
    total > 1500;

Kết quả:

Mệnh đề HAVING chỉ hữu ích khi bạn sử dụng nó với mệnh đề GROUP BY để tạo đầu ra của các báo cáo cấp cao. Ví dụ: bạn có thể sử dụng mệnh đề HAVING để trả lời các câu hỏi như tìm số lượng đơn đặt hàng trong tháng này, quý này hoặc năm nay có tổng số tiền lớn hơn 10K.

Tổng kết

Các bài viết liên quan:

    Liên hệ với chúng tôi

    Để lại thông tin để nhận được các bài viết khác

    Rate this post

    Xem thêm nhiều bài tin mới nhất về Kiến thức

    Xem thêm