GROUP BY – Mệnh đề

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.

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *