- DOUBLE PRECISION
4. Ngôn ngữ truy vấn dữ liệu 1 Truy vấn đơn giản
4.4 Truy vấn gom nhóm (group by)
Cú pháp
SELECT <danh sách các cột> FROM <danh sách các bảng> WHERE <điều kiện>
GROUP BY <danh sách các cột gom nhóm>
Sau khi gom nhóm
- Mỗi nhóm các bộ sẽ có cùng giá trị tại các thuộc tính gom nhóm
Ví dụ 10
Cho biết lƣơng cao nhất, lƣơng trung binh của mỗi đơn vị? Thông tin đƣa ra gồm: lluong lon nhat, luong tb, tenphg, maphg.
SELECT Max(NHANVIEN.LUONG) AS lonnhat, Avg(NHANVIEN.LUONG) AS trungbình, PHONGBAN.TENPhg, PHONGBAN.MAPHG
FROM PHONGBAN INNER JOIN (NHANVIEN INNER JOIN PHANCONG ON NHANVIEN.MANV = PHANCONG.MA_NVIEN) ON PHONGBAN.MAPHG = PHANCONG.MAPHG
GROUP BY PHONGBAN.TENPhg, PHONGBAN.MAPHG
Cho biết số lƣợng nhân viên của từng phòng ban
SELECT Count(MANV) AS [SL NV],TENPhg
FROM PHONGBAN INNER JOIN (NHANVIEN5 INNER JOIN PHANCONG ON NHANVIEN5.MANV = PHANCONG.MA_NVIEN) ON PHONGBAN.MAPHG = PHANCONG.MAPHG
GROUP BY PHONGBAN.TENPhg
44 Bài giảng csdl 60
Cú pháp
SELECT <danh sách các cột> FROM <danh sách các bảng> WHERE <điều kiện>
GROUP BY <danh sách các cột gom nhóm> HAVING <điều kiện trên nhóm>
Ví dụ 11:
Cho biết những nhân viên tham gia từ 2 đề án trở lên
SELECT MA_NVIEN, Count(MA_NVIEN) AS nhanventhamga
FROM PHANCONG GROUP BY MA_NVIEN
HAVING Count(MA_NVIEN)>=2
Cho biết những phòng ban (TENPHG) có lƣơng trung bình của các nhân viên lớn lơn 20000
SELECT TENPhg, Avg(LUONG) AS tb luong FROM PHONGBAN INNER JOIN (NHANVIEN INNER JOIN PHANCONG ON NHANVIEN.MANV = PHANCONG.MA_NVIEN) ON PHONGBAN.MAPHG = PHANCONG.MAPHG GROUP BY PHONGBAN.TENPhg HAVING Avg(LUONG)>20000 Nhận xét Mệnh đề GROUP BY
- Các thuộc tính trong mệnh đề SELECT (trừ những thuộc tính trong các hàm kết hợp) phải xuất hiện trong mệnh đề GROUP BY
Mệnh đề HAVING
- Sử dụng các hàm kết hợp trong mệnh đề SELECT để kiểm tra một số điều kiện nào đó
- Chỉ kiểm tra điều kiện trên nhóm, không là điều kiện lọc trên từng bộ
- Sau khi gom nhóm điều kiện trên nhóm mới đƣợc thực hiện
Thứ tự thực hiện câu truy vấn có mệnh đề GROUP BY và HAVING
- (1) Chọn ra những dòng thỏa điều kiện trong mệnh đề WHERE
- (2) Những dịng này sẽ đƣợc gom thành nhiều nhóm tƣơng ứng với mệnh đề GROUP BY
- (3) Áp dụng các hàm kết hợp cho mỗi nhóm
- (4) Bỏ qua những nhóm khơng thỏa điều kiện trong mệnh đề HAVING
- (5) Rút trích các giá trị của các cột và hàm kết hợp trong mệnh đề SELECT
Ví dụ 12a: Tìm 3 nhân viên có lƣơng cao nhất
SELECT TENNV
FROM NHANVIEN NV1 WHERE 2 >= (
45 Bài giảng csdl 60
FROM NHANVIEN NV2
WHERE NV2.LUONG>NV1.LUONG )
Ví dụ 12b: Tìm tên các nhân viên đƣợc phân công làm tất cả các đồ án
SELECT MANV, TENVN
FROM NHANVIEN, PHANCONG WHERE MANV=MA_NVIEN GROUP BY MANV, TENNV HAVING COUNT(*) = (
SELECT COUNT(*) FROM DEAN )