SQL HAVING - Lọc kết quả theo group by
Mệnh đề HAVING được sử dụng để lọc tập kết quả dựa trên kết quả của một hàm tổng hợp. Nó thường nằm gần hoặc ở cuối câu lệnh SQL.
HAVING thường đi đôi với sự hiện diện của mệnh đề GROUP BY , mặc dù có thể có mệnh đề HAVING mà không có mệnh đề GROUP BY.
Syntax
The syntax for HAVING is,
FROM "table_name"
[GROUP BY "column_name1"]
HAVING (arithmetic function condition);
Các dấu ngoặc nhọn xung quanh "column_name1" và GROUP BY "column_name1" có nghĩa là chúng là tùy chọn.
Lưu ý: Chúng tôi có thể chọn không, một hoặc nhiều cột ngoài chức năng tổng hợp. Nếu chúng ta chọn bất kỳ cột nào bên ngoài hàm tổng hợp, thì không cần mệnh đề GROUP BY.
Ví dụ
Chúng tôi sử dụng bảng sau cho ví dụ của chúng tôi.
Table Store_Information
Store_Name | Sales | Txn_Date |
Los Angeles | 1500 | Jan-05-1999 |
San Diego | 250 | Jan-07-1999 |
Los Angeles | 300 | Jan-08-1999 |
Boston | 700 | Jan-08-1999 |
Để chỉ xem các cửa hàng có doanh thu trên 1.500 đô la, chúng tôi sẽ nhập,
FROM Store_Information
GROUP BY Store_Name
HAVING SUM(Sales) > 1500;
Kết quả:
Store_Name | SUM(Sales) |
Los Angeles | 1800 |
Ba dòng đầu tiên của mã mang lại ba hàng: Los Angeles với Doanh số là 1.800, San Diego với Doanh số là 250 và Boston với Doanh số là 700. Sau đó, mệnh đề HAVING hoạt động trên ba hàng này. Tổng doanh thu cho cả San Diego và Boston đều dưới 1.500 đô la, vì vậy mệnh đề "HAVING SUM (Doanh số)> 1500" lọc ra hai cửa hàng này, để lại Los Angeles là hàng duy nhất được trả về cho SQL này.
Bài tập
Đối với các bài tập này, giả sử chúng ta có một bảng được gọi là Region_Sales với dữ liệu sau:
Table Region_Sales
Region | Year | Orders | Total_Sales |
West | 2013 | 1560 | 325000 |
West | 2014 | 1820 | 380000 |
North | 2013 | 790 | 148000 |
North | 2014 | 995 | 185000 |
East | 2013 | 1760 | 375000 |
East | 2014 | 2220 | 450000 |
South | 2013 | 1790 | 388000 |
South | 2014 | 1695 | 360000 |
1. Thứ tự nào sau đây là đúng đối với một câu lệnh SQL?
a) SELECT...FROM...ORDER BY...WHERE...HAVING
b) SELECT...FROM...WHERE...ORDER BY...HAVING
c) SELECT...WHERE...FROM...HAVING...ORDER BY
d) SELECT...FROM...WHERE...HAVING...ORDER BY
2. What is the result of the following SQL statement?
SELECT Region, SUM(Orders) FROM Region_Sales GROUP BY Region HAVING SUM(Orders) > 2500;
3. Kết quả của câu lệnh SQL sau là gì?
SELECT Region, SUM(Orders) FROM Region_Sales WHERE Total_Sales < 385000 GROUP BY Region HAVING SUM(Orders) > 2500;
Xem thêm:
- DELETE FROM - Xóa dòng trong SQL
- UPDATE - cú pháp cập nhật dữ liệu
- INSERT INTO SELECT - Insert dữ liệu từ câu lệnh select
- INSERT INTO - cú pháp thêm dữ liệu
- SELECT UNIQUE - Select loại bỏ trùng
- SQL AS - Gán bí danh cho bảng