Mệnh đề HAVING trong SQL Server

Mệnh đề HAVING trong SQL Server có thể được xem là một sự thay thế cho WHERE. Nguyên nhân vì sao? Ý nghĩa và cú pháp sử dụng của HAVING như thế nào? Hãy xem tiếp ngay dưới đây.

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

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ề.

Mệnh đề HAVING trong SQL ServerMệnh đề HAVING trong SQL Server

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.

Mệnh đề HAVING trong SQL ServerMệnh đề HAVING trong SQL Server

2. Ví dụ HAVING

Để thực hiện ví dụ này, bạn cần nhập cơ sở dữ liệu mẫu Northwind vào SQL Server Management Studio. Hãy xem bài viết hướng dẫn ngay dưới đây:

Câu lệnh SQL dưới đây sẽ liệt kê số lượng khách hàng trong mỗi quốc gia. Chỉ bao gồm các quốc gia có nhiều hơn 5 khách hàng:

SELECT COUNT(CustomerID), Country

FROM Customers

GROUP BY Country

HAVING COUNT(CustomerID) > 5;

Câu lệnh SQL dưới đây sẽ liệt kê số lượng khách hàng trong mỗi quốc gia, sắp xếp từ cao đến thấp. Chỉ bao gồm các quốc gia có nhiều hơn 5 khách hàng:

SELECT COUNT(CustomerID), Country

FROM Customers

GROUP BY Country

HAVING COUNT(CustomerID) > 5

ORDER BY COUNT(CustomerID) DESC;

Kết quả tương tự ví dụ trên nhưng lúc này, thứ tự các cột đã được sắp xếp từ cao đến thấp.

3. Ví dụ HAVING khác

Câu lệnh SQL dưới đây sẽ liệt kê danh sách có nhiều hơn 10 đơn đặt hàng:

SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrdersFROM (OrdersINNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID)GROUP BY LastNameHAVING COUNT(Orders.OrderID) > 10;

Câu lệnh SQL dưới đây sẽ liệt kê nếu nhân viên có tên “Davolio” hoặc “Fuller” có nhiều hơn 25 đơn đặt hàng:

SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders

FROM Orders

INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID

WHERE LastName = ‘Davolio’ OR LastName = ‘Fuller’

GROUP BY LastName

HAVING COUNT(Orders.OrderID) > 25;

Như vậy, HAVING gần như tương tự với WHERE nhưng HAVING có thể dùng với các hàm tổng hợp còn WHERE thì không. Vì thế, chúng ta thường thấy HAVING được sử dụng cùng với toán tử GROUP BY.

Mệnh đề HAVING trong SQL ServerMệnh đề HAVING trong SQL Server

(Nguồn: Tổng hợp)

Hy vọng rằng bài viết trên đã giúp các bạn biết thêm nhiều kiến thức hữu ích.

Nếu như bạn đang có nhu cầu xây dựng một Website phù hợp với thương hiệu của mình, nhưng vẫn chưa tìm được giải pháp tối ưu nhất thì hãy liên hệ ngay với chúng tôi trong hôm nay để được tư vấn miễn phí nhé!

ATPWEB – XÂY DỰNG NGÔI NHÀ ONLINE

Liên hệ:

  • Hotline: 0707 6666 56
  • Fanpage: http://facebook.com/atpweb.vn
  • Website: atpweb.vn

Đánh giá post