Báo cáo dữ liệu tổng hợp sử dụng Group Functions (tiếp theo)

144

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.

  1. 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