Chào mừng bạn đến với Vimentor!

Hỏi đáp
Đăng ký

02. Mệnh đề HAVING trong SQL

Mệnh đề HAVING trong SQL

Mệnh đề HAVING được sử dụng đề lọc dữ liệu dựa trên kết quả trả về của GROUP BY.

Cách dùng của mệnh đề HAVING thì tương tự như cách dùng của mệnh đề WHERE với lệnh SELECT thông thường.

Có một điều chú ý ở đây là WHERE không được dùng cùng với phát biểu GROUP BY, nên HAVING sẽ được dùng để thay thế vai trò của WHERE. Nói một cách tổng quát, mệnh đề WHERE thì không được dùng với các hàm hội tụ trong SQL.

Cú pháp sử dụng HAVING trong SQL như sau:

SELECT ten_cot, ten_ham_hoi_tu(ten_cot)

FROM ten_bang

WHERE bieu_thuc_dieu_kien1

GROUP BY ten_cot

HAVING bieu_thuc_dieu_kien2

Chú ý:

  • Biểu thức điều kiện 1 (bieu_thuc_dieu_kien1) không được sử dụng hàm hội tụ, vì WHERE không thể sử dụng với hàm hội tụ (ví dụ: WHERE SUM(total_price)>96000 là sai vì SUM là một hàm hội tụ).
  • Biểu thức điều kiện 2 (biểu thức điều kiện 2) là biểu thức chứa hàm hội tụ (ví dụ: ta có thể sử dụng cú pháp như sau HAVING SUM(total_price)>96000 ).

Ví dụ về cách sử dụng mệnh đề HAVING trong SQL

Ta có bảng "Order" như sau:

Order_ID

Date

Price

Customer

1

2017/07/07

12

Hanh

2

2017/07/13

11

Van

3

2017/07/11

5

Van

4

2017/07/23

24

Trang

5

2017/07/02

65

Hanh

6

2017/07/28

105

Nguyet

Nếu bạn muốn tìm tên của các khách hàng có tổng đơn hàng lớn hơn 50$, bạn có thể dùng câu lệnh sau:

SELECT Customer,SUM(Price) FROM Order GROUP BY Customer HAVING SUM(Price)>50

Sau khi chạy xong lệnh này, kết quả thu được sẽ là:

Customer

SUM(Price)

Hanh

77

Nguyet

105

Trong trường hợp bạn muốn tìm kiếm trong bảng dữ liệu xem Hanh và Nguyet có tổng số đơn hàng lớn hơn 100$ hay không, bạn dùng câu lệnh:

SELECT Customer,SUM(Price) FROM Order

WHERE Customer=’Hanh’ OR Customer=’Nguyet’

GROUP BY Customer HAVING SUM(Price)>100

Kết quả thu được của câu lệnh này sẽ như sau:

Customer

SUM(Price)

Nguyet

105

** Nếu bạn muốn viết các nội dung đặt biệt thì hãy làm theo hướng dẫn sau

Xem thêm 10 bình luận
Viết blog mới của bạn
Báo lỗi trang
Đang tải