Câu lệnh GROUP BY trong SQL
- Trang trước SQL sum()
- Trang tiếp theo SQL Having
Các hàm tổng hợp (ví dụ SUM) thường cần thêm câu lệnh GROUP BY.
Câu lệnh GROUP BY
Câu lệnh GROUP BY được sử dụng để kết hợp các hàm tổng hợp, phân nhóm kết quả theo một hoặc nhiều cột.
Cú pháp SQL GROUP BY
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name
Mẫu SQL GROUP BY
Chúng ta có bảng "Orders" sau đây:
O_Id | OrderDate | OrderPrice | Customer |
---|---|---|---|
1 | 2008/12/29 | 1000 | Bush |
2 | 2008/11/23 | 1600 | Carter |
3 | 2008/10/05 | 700 | Bush |
4 | 2008/09/28 | 300 | Bush |
5 | 2008/08/06 | 2000 | Adams |
6 | 2008/07/21 | 100 | Carter |
Hiện tại, chúng ta muốn tìm tổng số tiền (tổng số đơn đặt hàng) của mỗi khách hàng.
Chúng ta muốn sử dụng câu lệnh GROUP BY để nhóm theo khách hàng.
Chúng ta sử dụng câu lệnh SQL sau:
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer
Kết quả tập hợp giống như sau:
Customer | SUM(OrderPrice) |
---|---|
Bush | 2000 |
Carter | 1700 |
Adams | 2000 |
Đáng kinh ngạc đúng không?
Hãy cùng xem nếu bỏ qua GROUP BY sẽ xảy ra điều gì:
SELECT Customer,SUM(OrderPrice) FROM Orders
Kết quả tập hợp giống như sau:
Customer | SUM(OrderPrice) |
---|---|
Bush | 5700 |
Carter | 5700 |
Bush | 5700 |
Bush | 5700 |
Adams | 5700 |
Carter | 5700 |
Kết quả tập hợp trên không phải là điều chúng ta cần.
Vậy tại sao không thể sử dụng câu lệnh SELECT trên? Giải thích như sau: Câu lệnh SELECT trên chỉ định hai cột (Customer và SUM(OrderPrice)). "SUM(OrderPrice)" trả về một giá trị duy nhất (tổng cộng của cột "OrderPrice"), trong khi "Customer" trả về sáu giá trị (mỗi giá trị tương ứng với mỗi hàng trong bảng "Orders"). Do đó, chúng ta không nhận được kết quả chính xác. Tuy nhiên, bạn đã thấy, câu lệnh GROUP BY đã giải quyết vấn đề này.
GROUP BY nhiều hơn một cột
Chúng ta cũng có thể áp dụng câu lệnh GROUP BY cho nhiều cột hơn, ví dụ như sau:
SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders GROUP BY Customer,OrderDate
- Trang trước SQL sum()
- Trang tiếp theo SQL Having