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 được đáp ứng là TRUE.

Cú pháp mệnh đề HAVING trong SQL Server

SELECT bieuthuc1, bieuthuc2,  bieuthuc_n,        ham_tong (bieuthuc) FROM bang [WHERE dieukien] GROUP BY bieuthuc1, bieuthuc2,  bieuthuc_n HAVING dieukien_having;

Tên biến hoặc giá trị biến

ham_tong

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

bieuthuc1, bieuthuc2, … bieuthuc_n

Biểu thức không nằm bên trong hàm tổng và phải nằm trong mệnh đề GROUP BY.

WHERE dieukien

Tùy chọn. Các điều kiện mà bản ghi phải đáp ứng để được chọn.

HAVING dieukien_having

Đây là điều kiện thêm chỉ áp dụng với kết quả tổng để giới hạn các nhóm của những hàng được trả về. Chỉ các nhóm mà điều kiện được đánh giá là TRUE mới nằm trong bộ 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ụ về mệnh đề HAVING ở trên dùng hàm SUM để trả về tên của bộ phận và tổng số lượng (trong bộ phận liên quan). Mệnh đề HAVING sẽ lọc kết quả để chỉ các bộ phận có số lượng lớn hơn 100 được trả về.

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 đang ở bang California. Mệnh đề HAVING sẽ lọc để chỉ trả về các 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;

Ở ví dụ này, kết quả trả về là tên của mỗi bộ phận và số lương tối thiểu trong từng bộ phận. Mệnh đề HAVING sẽ 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 cùng này, kết quả trả về là họ của nhân viên và số lương tối đa cho giá trị họ đó. Mệnh đề HAVING giới hạn chỉ trả về các giá trị họ có lương tối đa lớn hơn $34.000.