Vấn đề:
Bạn muốn tìm các nhóm hàng có số lượng mục nhập cụ thể trong một nhóm.
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
và category
.
id | tên | loại |
---|---|---|
1 | ghế sofa | đồ nội thất |
2 | găng tay | quần áo |
3 | Áo phông | quần áo |
4 | ghế | đồ nội thất |
5 | bàn | đồ nội thất |
6 | xem | điện tử |
7 | ghế bành | đồ nội thất |
8 | váy | quần áo |
9 | máy thu thanh | điện tử |
Hãy tìm danh mục sản phẩm có nhiều hơn hai mục nhập.
Giải pháp:
SELECT category, COUNT(id) FROM product GROUP BY category HAVING COUNT(id)>2;
Đây là kết quả:
loại | số lượng |
---|---|
đồ nội thất | 4 |
quần áo | 3 |
Thảo luận:
Để lọc các bản ghi theo số hàng đã cho trong nhóm, hãy sử dụng mệnh đề HAVING. Nó lọc các hàng bằng cách sử dụng hàm tổng hợp điều kiện như COUNT. Đầu tiên, trong SELECT, sử dụng tên của một cột hoặc các cột để nhóm các hàng (đây là một danh mục trong ví dụ của chúng tôi), sau đó đặt hàm tổng hợp COUNT, hàm này tính số lượng bản ghi trong mỗi nhóm. Để đếm số hàng, hãy sử dụng cột id lưu trữ các giá trị duy nhất (trong ví dụ của chúng tôi, chúng tôi sử dụng COUNT(id)
). Tiếp theo, sử dụng mệnh đề GROUP BY để nhóm các bản ghi theo các cột (GROUP BY
danh mục trên). Sau khi sử dụng GROUP BY để lọc các bản ghi có hàm tổng hợp như COUNT, hãy sử dụng mệnh đề HAVING. Nó luôn được sử dụng sau mệnh đề GROUP BY. Trong HAVING, chúng tôi sử dụng một điều kiện để so sánh một giá trị với một giá trị được trả về bởi hàm tổng hợp. Trong ví dụ này, chúng tôi so sánh xem COUNT (id) có trả về giá trị cao hơn hai hay không. Nếu đúng, danh mục sẽ được trả lại cùng với số lượng sản phẩm.