Trong bài trước chúng ta đã biết được Group Function là gì, cách sử dụng một số Group Functions. Các bạn có thể xem lại tại đây. Bài này SysVN tiếp tục giới thiệu bài viết liên quan đến Group Function, cụ thể là giới thiệu các mệnh đề GROUP BY, HAVING và cách sử dụng những Group Function lồng vào nhau.
- Mệnh đề GROUP BY
Trong bài trước chúng ta biết được group function tính toán trên cả 1 table như là 1 group lớn và xuất ra 1 kết quả cho group lớn đấy. Tuy nhiên, trong những trường hợp chúng ta cần phân chia table lớn đó thành những group nhỏ hơn và xuất ra kết quả cho từng group nhỏ đó. Để làm được điều này bằng cách sử dụng mệnh đề group by.
Ví dụ: Tính lương trung bình của từng phòng ban trong công ty.
Cú pháp mệnh đề GROUP BY
Có thể sử dụng mệnh đề GROUP BY để phân chia những hàng trong table thành những group nhỏ hơn
Cách sử dụng
- Khi sử dụng mệnh đề GROUP BY, những column được liệt kê trong mệnh đề SELECT phải được khai báo trong mệnh đề GROUP BY ngoại trừ group function.
- Column được khai báo trong group function không được khai báo trong mệnh đề GROUP BY
- Có thể sử dụng thêm mệnh đề WHERE để loại ra những hàng trước khi phân thành những group
- Không thể sử dụng column alias trong mệnh đề GROUP BY
- Có thể sử dụng thêm mệnh đề ORDER BY để hiển thị kết qua theo tứ tự ascending hoặc descending
- Column GROUP BY không nhất thiết phải được liệt kê trong mệnh đề SELECT
Ví dụ:
SELECT AVG(salary)
FROM employees
GROUP BY department_id ;
Có thể sử dụng GROUP FUNCTION trong mệnh đề ORDER BY
Ví dụ:
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id
ORDER BY AVG(salary);
Mệnh đề GROUP BY có thể sử dụng nhiều column
Ví dụ:
Đầu tiên table EMPLOYEES được group lại bởi department_id. Sau đó department_id được group lại bởi job_id
2. Những vi phạm khi sử dụng group function
Bất kỳ một biểu thức hoặc column nào được liệt kê trong mệnh đề SELECT phải được khai báo trong group by.
3. Cách sử dụng HAVINH
Không sử dụng mệnh đề WHERE với group function mà sử dụng mệnh đề HAVING với group function để giới hạn kết quả hiển thị
Cú pháp:
Ví dụ:
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000 ;
4. Các Group Function lồng vào nhau
Ví dụ: Hiển thị lương trung bình tối đa của từng phong ban
SELECT MAX(AVG(salary))
FROM employees
GROUP BY department_id;
MAX(AVG(SALARY))
—————-
19333.3333