GROUP BY – Mệnh đề
Nội dung
1. Mô tả
- Mệnh đề GROUP BY dùng để tạo các phân nhóm dữ liệu trên 1 cột hoặc nhiều cột.
2. Cú pháp
SELECT Tên_cột, Hàm_nhóm_dữ_liệu
FROM Tên_bảng
WHERE Điều_kiện
GROUP BY Biểu_thức_nhóm_dữ_liệu
HAVING Điều_kiện_lọc_nhóm_dữ_liệu
ORDER BY Tên_cột
3. Ví dụ
- Sử dụng GROUP BY trên 1 cột:
SELECT Department_id, SUM(Salary) "Tổng lương"
FROM EMPLOYEES
GROUP BY Department_id
ORDER BY Department_id
- Sử dụng GROUP BY trên nhiều cột:
SELECT Department_id, Job_id, SUM(Salary)
FROM EMPLOYEES
GROUP BY Department_id, Job_id
ORDER BY Department_id
- Một số lưu ý khi sử dụng các hàm nhóm dữ liệu (AVG, COUNT, MAX, MIN, SUM): bất kỳ một cột hay biểu thức trong danh sách của SELECT không phải là hàm nhóm dữ liệu thì phải có mệnh đề GROUP BY.
--Sai:
SELECT DEPARTMENT_ID, AVG(SALARY)
FROM EMPLOYEES
--Đúng:
SELECT DEPARTMENT_ID, AVG(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
- Không thể sử dụng mệnh đề WHERE để giới hạn bớt các nhóm; Sử dụng mệnh đề HAVING để lọc bớt các nhóm; Không được phép sử dụng các hàm nhóm dữ liệu trong mệnh đề WHERE.
--Sai:
SELECT DEPARTMENT_ID, SUM(SALARY)
FROM EMPLOYEES
WHERE SUM(SALARY) > 10000
GROUP BY DEPARTMENT_ID
ORDER BY DEPARTMENT_ID
--Đúng:
SELECT DEPARTMENT_ID, SUM(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
HAVING SUM(SALARY) > 10000
ORDER BY DEPARTMENT_ID
- Dùng mệnh đề WHERE để lọc và Group By để nhóm dữ liệu:
SELECT DEPARTMENT_ID, SUM(SALARY)
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN(10, 20, 30)
GROUP BY DEPARTMENT_ID
HAVING SUM(SALARY) > 10000
ORDER BY DEPARTMENT_ID