Chức năng:
Xuất ra kết quả là các dữ liệu thỏa mãn các điều kiện theo từng nhóm quy định trong GROUP BY.
Cú pháp:
SELECT [DISTINCT] *|DANH_SACH_THUOC_TINH|BIEU_THUC,...
FROM DANH_SACH_QUAN_HE
[WHERE BIEU_THUC_DIEU_KIEN]
GROUP BY DANH_SACH_THUOC_TINH
HAVING DIEU_KIEN_TREN_TUNG_NHOM
Trong đó:
+ DANH_SACH_THUOC_TINH: bao gồm tất cả các cột muốn rút trích thông tin từ quan hệ trong cơ sở dữ liệu. Các thuộc tính cách nhau bởi dấu ",". Các thuộc tính trùng tên phải đặt tên quan hệ gắn liền với thuộc tính đó (theo quy tắc TEN_QUAN_HE.TEN_THUOC_TINH).
+ DANH_SACH_QUAN_HE: bao gồm tất cả các quan hệ tham gia hỗ trợ thực hiện yêu cầu truy vấn. Các quan hệ cách nhau bởi dấu ",".
+ BIEU_THUC_DIEU_KIEN: các dòng dữ liệu được rút trích ra từ cơ sở dữ liệu phải thỏa mãn các biểu thức điều kiện đã được quy định trong mệnh đề WHERE. Các điều kiện được nối với nhau bởi AND/OR.
+ Mệnh đề GROUP BY: danh sách các thuộc tính được chọn làm tiêu chí gom nhóm. Tất cả các thuộc tính đơn lẻ (ngoại trừ các hàm kết hợp và gom nhóm) xuất hiện trong mệnh đề SELECT phải đặt vào GROUP BY.
+ DIEU_KIEN_TREN_TUNG_NHOM: dữ liệu kết quả phải thỏa mãn các biểu thức điều kiện đã quy định trong mệnh đề HAVING, điều kiện này được thực hiện trên từng nhóm trong theo tiêu chí gom nhóm trong mệnh đề GROUP BY. Các điều kiện được nối với nhau bởi AND/OR.
Ví dụ minh họa
Để thuận tiện cho các bạn học tập, mình có tạo sẵn file .sql trong này đã mình tạo cấu trúc bảng và data sẵn để các bạn dễ dàng thực hiện truy vấn, các bạn có thể tải tại đây.
Ví dụ 1: Hãy cho biết các phòng có mức lương trung bình trên 30000
SELECT PHG, AVG(LUONG) AS 'TB_LUONG'
FROM NHANVIEN
GROUP BY PHG
HAVING AVG(LUONG) > 30000
Kết quả:
Ví dụ 2: Hãy cho biết tên phòng có sô lượng nhân viên từ 3 nhân viên trở lên.
SELECT TENPHG, COUNT(MANV) AS 'SLNV'
FROM NHANVIEN, PHONGBAN
WHERE PHG = MAPHG
GROUP BY PHG, TENPHG
HAVING COUNT(MANV) > 3
Kết quả: