Vấn đề:
Bạn muốn tìm các nhóm hàng trong đó giá trị trung bình trong một cột cao hơn hoặc thấp hơn một giá trị nhất định.
Ví dụ:
Cơ sở dữ liệu của chúng tôi có một bảng tên là product
với dữ liệu trong các cột sau:id
, name
, grocery
và price
.
id | tên | hàng tạp hóa | giá |
---|---|---|---|
1 | sữa | Cửa hàng xanh | 2,34 |
2 | bánh mì | Cửa hàng tạp hóa của Clark | 3,56 |
3 | bánh mì | Siêu thị | 4,15 |
4 | sữa | Siêu thị | 1,80 |
5 | bánh mì | Cửa hàng tạp hóa Amanda | 2,26 |
6 | sữa | Violet Grocery | 3,45 |
7 | sữa | Cửa hàng tạp hóa của Clark | 2.10 |
8 | bánh mì | Violet Grocery | 2,55 |
9 | sữa | Cửa hàng tạp hóa Amanda | 1,95 |
Hãy tìm tên của các sản phẩm trong đó giá trung bình của mỗi sản phẩm giữa các cửa hàng tạp hóa cao hơn 3,00.
Giải pháp:
SELECT name, AVG(price) FROM product GROUP BY name HAVING AVG(price)>3.00;
Đây là kết quả:
name | trung bình |
---|---|
bánh mì | 3,13 |
Thảo luận:
Để lọc các bản ghi bằng hàm tổng hợp, hãy sử dụng mệnh đề HAVING.
Ở đây chúng tôi tính giá trị tổng hợp:giá trung bình của mỗi sản phẩm. Một được bán bởi nhiều hơn một người bán tạp hóa; do đó giá trung bình được tính cho mỗi (trong ví dụ của chúng tôi là SELECT name, AVG(price)
). Bên cạnh hàm tổng hợp, chúng ta cũng sử dụng tên cột trong SELECT, vì vậy chúng ta nên sử dụng GROUP BY với tên cột này (GROUP BY name
).
Bước cuối cùng là sử dụng hàm tổng hợp trong mệnh đề HAVING. Hãy nhớ rằng HAVING nên được đặt sau mệnh đề GROUP BY. Nó chứa điều kiện so sánh giá trị được trả về bởi hàm tổng hợp với một giá trị nhất định. Ở trên, đó là giá trung bình của sản phẩm có giá trị 3,00 (HAVING AVG(price)>3.00
). Trong truy vấn này, chúng tôi kiểm tra xem giá trung bình của mỗi sản phẩm trong tất cả các cửa hàng tạp hóa có cao hơn ba hay không. Truy vấn chỉ hiển thị một sản phẩm, bánh mì, với giá trung bình cao hơn ba.