Bài viết này được đăng tại
freetuts.net
Bạn đang đọc: Lệnh Having trong SQL Server – Freetuts
, không được copy dưới mọi hình thức.
Tóm Tắt
1. Lệnh Having trong SQL Server dùng để làm gì?
Như bạn biết, để thêm điều kiện kèm theo lọc thì ta thường đặt trong lệnh WHERE. Tuy nhiên theo quy tắc hoạt động giải trí của câu SQL sẽ chạy ở Group By trước rồi mới đến Where. Vì vậy trường hợp bạn muốn thêm điều kiện kèm theo trong lúc Group By thì có giải pháp nào không ?
Thật may là ngôn ngữ T-SQL khá thông minh, nó cho phép bạn thêm điều kiện ở Group By bằng lệnh HAVING.
Cú pháp như sau:
Bài viết này được đăng tại [ không lấy phí tuts. net ]
SELECT select_list FROM table_name GROUP BY group_list HAVING conditions;
Trong cú pháp này thì conditions
chính là điều kiện lọc lúc group by.
Ví dụ: bạn muốn tìm tổng số học sinh theo thành phố, nhưng không đếm những học sinh có năm sinh là 2000.
SELECT city, count(student_id) as total FROM Students GROUP BY city HAVING year_bon <> 2000
Bây giờ ta sẽ làm ví dụ trong thực tiễn hơn nhé .
2. Ví dụ Having trong SQL Server
Trước tiên hãy giúp mình tạp một số ít table như sau :
Trong đó:
- Table products dùng lưu trữ sản phẩm
- Table orders dùng lưu trữ đơn hàng
- Table order_items dùng lưu trữ danh sách sản phẩm của mỗi đơn hàng. Như vậy nó sẽ có mối quan hệ (n : 1) với cả hai bảng còn lại.
Having với hàm Count
Câu lệnh dưới đây sử dụng mệnh đề HAVING để tìm những người mua đã đặt tối thiểu 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;
Having với hàm SUM
Câu lệnh dứoi đây tìm thấy giá niêm yết tối đa và tối thiểu trong mỗi loại mẫu sản phẩm. Sau đó, nó lọc ra 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 dưới 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
Câu lệnh dưới đây tìm các chuyên mục sản phẩm có giá niêm yết trung bình (tất cả sản phẩm của chuyên mục đó) 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;
Trên là cách sử dụng Having trong SQL Server. Nếu bạn liên tục sử dụng Group By thì không hề thiếu câu lệnh này .
Và một quan tâm mình muốn nhắc nhở, đó là Having sẽ hoạt động giải trí trước lênh Where nhé. Vì vậy bạn không hề sử dụng Where để lọc trong lúc gom nhóm bằng Group By .
Source: https://final-blade.com
Category: Kiến thức Internet