Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng mệnh đề HAVING
trong SQL Server để lọc các nhóm dựa trên các điều kiện được chỉ định.
HAVING
trong SQL ServerMệnh đề HAVING
thường được sử dụng với mệnh đề GROUP BY
để lọc các nhóm dựa trên một danh sách các điều kiện. Sau đây minh họa cú pháp mệnh đề HAVING
:
SELECT
select_list
FROM
table_name
GROUP BY
group_list
HAVING
conditions;
Trong cú pháp này, mệnh đề GROUP BY
sẽ tổng hợp các bản ghi thành các nhóm và mệnh đề HAVING
sẽ áp dụng một hoặc nhiều điều kiện cho các nhóm này.
Chỉ các nhóm thỏa mãn điều kiện trong mệnh đề HAVING
mới được bao gồm trong tập kết quả.
Vì SQL Server xử lý mệnh đề HAVING
sau mệnh đề GROUP BY
, bạn không thể sử dụng bí danh cột để tham chiếu đến các hàm tập hợp được chỉ định trong câu lệnh SELECT
. Truy vấn sau đây sẽ thất bại:
SELECT
column_name1,
column_name2,
aggregate_function (column_name3) column_alias
FROM
table_name
GROUP BY
column_name1,
column_name2
HAVING
column_alias > value;
Thay vào đó, bạn phải sử dụng các hàm tập hợp trực tiếp trong mệnh đề HAVING
một cách rõ ràng như sau:
SELECT
column_name1,
column_name2,
aggregate_function (column_name3) alias
FROM
table_name
GROUP BY
column_name1,
column_name2
HAVING
aggregate_function (column_name3) > value;
HAVING
trong SQL ServerHãy lấy một số ví dụ để hiểu cách HAVING
hoạt động của mệnh đề.
HAVING
với hàm COUNT
trong SQL ServerChúng ta sẽ sử dụng bảng orders
trong cơ sở dữ liệu mẫu BikeStores để minh họa:
Câu lệnh sau đây sử dụng mệnh đề HAVING
để tìm các khách hàng đã đặt ít nhất hai đơn hàng mỗi năm:
SELECT
customer_id,
YEAR (order_date),
COUNT (order_id) order_count
FROM
sales.orders
GROUP BY
customer_id,
YEAR (order_date)
HAVING
COUNT (order_id) >= 2
ORDER BY
customer_id;
Trong ví dụ này:
GROUP BY
nhóm các đơn đặt hàng theo khách hàng và năm đặt hàng. Hàm COUNT()
trả về số lượng đơn đặt hàng mỗi khách hàng được đặt trong mỗi năm.HAVING
sẽ lọc bỏ tất cả các khách hàng có số lượng đơn đặt hàng ít hơn hai.HAVING
với hàm SUM
trong SQL ServerChúng ta sẽ sử dụng bảng order_items
trong cơ sở dữ liệu mẫu BikeStores để minh họa:
Câu lệnh sau đây tìm kiếm các đơn đặt hàng có giá trị ròng lớn hơn 20.000:
SELECT
order_id,
SUM (
quantity * list_price * (1 - discount)
) net_value
FROM
sales.order_items
GROUP BY
order_id
HAVING
SUM (
quantity * list_price * (1 - discount)
) > 20000
ORDER BY
net_value;
Trong ví dụ này:
SUM
trả về giá trị ròng của đơn đặt hàng.HAVING
lọc bỏ tất cả các đơn đặt hàng có giá trị ròng nhỏ hơn hoặc bằng 20.000.HAVING
với hàm MAX
và MIN
trong SQL ServerChúng ta sẽ sử dụng bảng products
trong cơ sở dữ liệu mẫu BikeStores để minh họa:
Câu lệnh sau đây trước tiên tìm giá niêm yết tối đa và tối thiểu trong mỗi loại sản phẩm. Sau đó, nó lọc ra các loại sản phẩm có giá niêm yết tối đa lớn hơn 4.000 hoặc giá niêm yết tối thiểu nhỏ hơn 500:
SELECT
category_id,
MAX (list_price) max_list_price,
MIN (list_price) min_list_price
FROM
production.products
GROUP BY
category_id
HAVING
MAX (list_price) > 4000 OR MIN (list_price) < 500;
HAVING
với hàm AVG
trong SQL ServerCâu lệnh sau đây tìm kiếm các loại sản phẩm có giá niêm yết trung bình nằm trong khoảng từ 500 đến 1.000:
SELECT
category_id,
AVG (list_price) avg_list_price
FROM
production.products
GROUP BY
category_id
HAVING
AVG (list_price) BETWEEN 500 AND 1000;
Trong hướng dẫn này, bạn đã học cách sử dụng mệnh đề HAVING
trong SQL Server để lọc các nhóm dựa trên các điều kiện được chỉ định.
Bạn có thể vui lòng tắt trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi duy trì hoạt động của trang web.
Trong hướng dẫn này, bạn sẽ tìm hiểu về GUID trong SQL Server và cách sử dụng hàm NEWID() để tạo giá trị GUID.
Trong hướng dẫn này, bạn sẽ học cách sử dụng kiểu dữ liệu DATETIMEOFFSET trong SQL Server để thao tác datetime với múi giờ.
Trong hướng dẫn này, bạn sẽ học cách lưu trữ thời gian trong ngày trong cơ sở dữ liệu bằng cách sử dụng kiểu dữ liệu TIME trong SQL Server.
Trong hướng dẫn này, bạn sẽ học cách sử dụng kiểu dữ liệu DATE trong SQL Server để lưu trữ dữ liệu ngày tháng trong một bảng.