1. Câu lệnh GROUP BY
Câu lệnh GROUP BY được sử dụng để nhóm các hàng có cùng giá trị trong câu lệnh truy vấn. Các nhóm này sẽ được nhóm lại theo cột. Câu lệnh GROUP BY thường được sử dụng kèm theo các hàm như: COUNT(), MAX(), MIN(), SUM(), AVG() để nhóm các kết quả theo một cột hoặc nhiều cột.
Cú pháp câu lệnh GROUP BY như sau:
SELECT column_name(s) FROM table_name WHERE condition GROUP BY column_name(s) ORDER BY column_name(s);
Trong đó:
- SELECT column_name(s) là câu lệnh chọn các cột
- table_name là bảng cần chọn
- WHERE condition điều kiện chọn cho từng bảng ghi
- GROUP BY column_name(s) là câu lệnh nhóm các kết quả theo cột được chỉ định
Chú ý: Trong câu lệnh GROUP BY column_name(s) thì tên cột được chọn làm nhóm phải được có ở trong câu lệnh SELECT column_name(s)
2. Ví dụ câu lệnh GROUP BY
2.1 Câu lệnh GROUP BY trong một bảng
Dưới đây là bảng KhachHang bao gồm các cột: ID, TenKH, DiaChi, ThanhPho, SoDienThoai
ID | TenKH | DiaChi | ThanhPho | SoDienThoai |
1 | Nguyen Van A | Tay Ho | Ha Noi | 0888999888 |
2 | Nguyen Van B | Quan 5 | Ho Chi Minh | 0988988988 |
3 | Nguyen Van C | Quan 7 | Ho Chi Minh | 0899899899 |
4 | Nguyen Van D | Bac Tu Liem | Ha Noi | 0788788788 |
5 | Nguyen Van E | Ngo Quen | Hai Phong | 0858585858 |
6 | Nguyen Van F | Ngu Hanh Son | Da Nang | 0969696969 |
7 | Nguyen Van G | Tay Ho | Ha Noi | 0838383838 |
Câu lệnh SQL sau liệt kê (hay đếm) số lượng khách hàng ở mỗi thành phố và sắp xếp theo thứ tự A-Z. Câu lệnh thực hiện bằng cách sử dụng hàm COUT() để đếm các bản ghi theo trường ID trong bảng khách hàng và kết hợp với câu lệnh GROUP BY để nhóm lại theo cột ThanhPho như sau:
SELECT ThanhPho, COUNT(KhachHang.ID) AS SoLuongKH FROM KhachHang GROUP BY ThanhPho ORDER BY ThanhPho ASC;
Kết quả:
ThanhPho | SoLuongKH |
Da Nang | 1 |
Ha Noi | 3 |
Hai Phong | 1 |
Ho Chi Minh | 2 |
2.2 Câu lệnh GROUP BY với hai bảng
Bảng đầu tiên trong ví dụ này sẽ có tên DatHang trong bảng này sẽ có các cột là: MaDH, SoLuong, KhachHang_ID, MaNG bên dưới đây là bảng DatHang
MaDH | SoLuong | KhachHang_ID | MaNG |
1 | 123 | 3 | 1 |
2 | 345 | 3 | 1 |
3 | 567 | 2 | 3 |
4 | 789 | 1 | 2 |
Bảng tiếp theo trong ví dụ này sẽ có tên là NguoiGui bao gồm các cột là: MaNG, TenNG như bên dưới:
MaNG | TenNG |
1 | Nguoi Gui A |
2 | Nguoi Gui B |
3 | Nguoi Gui C |
Câu lệnh SQL sau liệt kê số lượng đơn đặt hàng được gửi bởi mỗi người gửi hàng, trong câu lệnh này sẽ sử dụng mệnh đề LEFT JOIN kết hợp với câu lệnh GROUP BY như sau:
SELECT NguoiGui.TenNG, COUNT(DatHang.MaDH) AS SL_HangGui FROM DatHang LEFT JOIN NguoiGui ON DatHang.MaNG = NguoiGui.MaNG GROUP BY TenNG;
Kết quả:
TenNG | SL_HangGui |
Nguoi Gui A | 2 |
Nguoi Gui B | 1 |
Nguoi Gui C | 1 |