Việc báo cáo dữ liệu tổng hợp bằng cách sử dụng các hàm nhóm (group functions) trong SQL là một kỹ thuật quan trọng để phân tích và tóm tắt dữ liệu. Các hàm nhóm này thường được sử dụng cùng với mệnh đề GROUP BY để tính toán và trả về một giá trị duy nhất cho mỗi nhóm các hàng trong tập dữ liệu.
Using Group Functions | Sử dụng Group by trong SQL
Các Hàm Nhóm Phổ Biến sử dụng Group by
- COUNT(): Đếm số hàng trong mỗi nhóm.
- SUM(): Tính tổng giá trị của một cột số trong mỗi nhóm.
- AVG(): Tính giá trị trung bình của một cột số trong mỗi nhóm.
- MIN(): Tìm giá trị nhỏ nhất của một cột trong mỗi nhóm.
- MAX(): Tìm giá trị lớn nhất của một cột trong mỗi nhóm.
Cách Sử Dụng Các Hàm Với GROUP BY
1. COUNT()
Ví dụ: Đếm số lượng nhân viên trong mỗi phòng ban.
SELECT department_id, COUNT(*) AS num_employees FROM employees GROUP BY department_id;
Kết quả:
department_id | num_employees |
---|---|
10 | 3 |
20 | 5 |
30 | 7 |
2. SUM()
Ví dụ: Tính tổng lương của các nhân viên trong mỗi phòng ban.
SELECT department_id, SUM(salary) AS total_salary FROM employees GROUP BY department_id;
Kết quả:
department_id | total_salary |
---|---|
10 | 50000 |
20 | 75000 |
30 | 100000 |
3. AVG()
Ví dụ: Tính lương trung bình của các nhân viên trong mỗi phòng ban.
SELECT department_id, AVG(salary) AS average_salary FROM employees GROUP BY department_id;
Kết quả:
department_id | average_salary |
---|---|
10 | 16666.67 |
20 | 15000.00 |
30 | 14285.71 |
4. MIN()
Ví dụ: Tìm lương thấp nhất của các nhân viên trong mỗi phòng ban.
SELECT department_id, MIN(salary) AS min_salary FROM employees GROUP BY department_id;
Kết quả:
department_id | min_salary |
---|---|
10 | 15000 |
20 | 12000 |
30 | 10000 |
5. MAX()
Ví dụ: Tìm lương cao nhất của các nhân viên trong mỗi phòng ban.
SELECT department_id, MAX(salary) AS max_salary FROM employees GROUP BY department_id;
Kết quả:
department_id | max_salary |
---|---|
10 | 20000 |
20 | 20000 |
30 | 20000 |
Sử Dụng GROUP BY Với Nhiều Cột
Bạn cũng có thể nhóm theo nhiều cột. Ví dụ, để đếm số nhân viên trong mỗi phòng ban theo từng chức danh công việc:
SELECT department_id, job_id, COUNT(*) AS num_employees FROM employees GROUP BY department_id, job_id;
Kết quả:
department_id | job_id | num_employees |
---|---|---|
10 | IT_PROG | 2 |
10 | AD_ASST | 1 |
20 | MK_REP | 3 |
20 | HR_REP | 2 |
30 | SA_MAN | 4 |
30 | SA_REP | 3 |
Sử Dụng HAVING Để Lọc Kết Quả Sau Khi Nhóm
Mệnh đề HAVING được sử dụng để lọc kết quả sau khi đã áp dụng GROUP BY. Điều này tương tự như mệnh đề WHERE nhưng được sử dụng cho các nhóm.
Ví dụ: Chỉ hiển thị các phòng ban có tổng lương lớn hơn 70,000.
SELECT department_id, SUM(salary) AS total_salary FROM employees GROUP BY department_id HAVING SUM(salary) > 70000;
Kết quả:
department_id | total_salary |
---|---|
20 | 75000 |
30 | 100000 |
Tóm lại:
- COUNT(): Đếm số hàng.
- SUM(): Tính tổng.
- AVG(): Tính trung bình.
- MIN(): Tìm giá trị nhỏ nhất.
- MAX(): Tìm giá trị lớn nhất.
- GROUP BY: Nhóm các hàng lại với nhau để áp dụng các hàm nhóm.
- HAVING: Lọc các nhóm sau khi đã áp dụng GROUP BY.
Sử dụng các hàm nhóm và mệnh đề GROUP BY giúp bạn tóm tắt và phân tích dữ liệu một cách hiệu quả trong SQL.