Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> SQL Server

Mệnh đề HAVING trong SQL Server

Mệnh đề HAVING được dùng kết hợp với mệnh đề GROUP BY trong SQL Server (Transact-SQL) để giới hạn nhóm các hàng trả về, chỉ khi điều kiện được đánh giá là TRUE.

Cú pháp mệnh đề HAVING

SELECT bieu_thuc1, bieu_thuc2, … bieu_thuc_n,
       ham_tong(bieu_thuc)
FROM bang
[WHERE dieu_kien]
GROUP BY bieu_thuc1, bieu_thuc2, … bieu_thuc_n
HAVING dieu_kien_having;

Tham số

ham_tong: Có thể là các hàm như SUM, COUNT, MIN, MAX hoặc AVG.

bieu_thuc1, bieu_thuc2, … bieu_thuc_n: Biểu thức không nằm trong hàm tổng hợp và phải có trong mệnh đề GROUP BY.

WHERE dieu_kien: Tùy chọn. Điều kiện bản ghi phải thỏa mãn để được chọn.

HAVING dieu_kien_having: Đây là điều kiện bổ sung chỉ áp dụng cho kết quả tổng hợp để giới hạn nhóm hàng trả về. Chỉ các nhóm có điều kiện đánh giá là TRUE mới nằm trong tập kết quả.

Ví dụ – dùng hàm SUM

SELECT bophan, SUM(soluong) AS 'Tong so luong'
FROM sanpham
GROUP BY bophan
HAVING SUM(soluong) > 100;

Ví dụ HAVING dùng hàm SUM trả về tên bộ phận và tổng số lượng (theo bộ phận liên quan). Mệnh đề HAVING lọc kết quả để chỉ trả về các bộ phận có số lượng lớn hơn 100.

Ví dụ – dùng hàm COUNT

SELECT thanhpho, COUNT(*) AS 'So nhanvien'
FROM nhanvien
WHERE bang = 'California'
GROUP BY thanhpho
HAVING COUNT(*) > 20;

Ví dụ này trả về thành phố và số nhân viên (ở thành phố đó) hiện tại ở California. Mệnh đề HAVING lọc để chỉ trả về thành phố có nhiều hơn 20 nhân viên.

Ví dụ – dùng hàm MIN

SELECT bophan, MIN(luong) AS 'Luong thap nhat'
FROM nhanvien
GROUP BY bophan
HAVING MIN(luong) >= 50000;

Trong ví dụ này, kết quả trả về tên từng bộ phận và mức lương tối thiểu trong mỗi bộ phận. Mệnh đề HAVING chỉ trả về các bộ phận có lương tối thiểu lớn hơn hoặc bằng 50.000.

Ví dụ – dùng hàm MAX

SELECT ho, MAX(luong) AS 'Luong cao nhat'
FROM nhanvien
GROUP BY bophan
HAVING MAX(luong) > 34000;

Trong ví dụ cuối, kết quả là họ nhân viên và mức lương tối đa cho giá trị họ đó. Mệnh đề HAVING giới hạn chỉ các họ có lương tối đa lớn hơn 34.000.