SQL HAVING - Lọc kết quả theo group by

2022-11-02 13:52:05

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,

SELECT ["column_name1"], "function name" ("column_name2")
FROM "table_name"
[GROUP BY "column_name1"]
HAVING (arithmetic function condition);

Các dấu ngoặc nhọn xung quanh "column_name1"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,

SELECT Store_Name, SUM(Sales)
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:


Chia sẻ: