MYSQL CĂN BẢN
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

Group By trong MySQL

Group By trong MySQL có công dụng gom nhóm dữ liệu theo một hoặc nhiều field nào đó. Nó rất hữu ích khi xuất dữ liệu trong báo cáo, nhưng sẽ ảnh hưởng đến tốc độ xử lý của cấu truy vấn.

Nói là ảnh hưởng nhưng thực tế bắt buộc ta phải sử dụng lệnh này, nếu không bạn sẽ không thể lọc dữ liệu chính xác được.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Giới thiệu Group By trong MySQL

Mệnh đề GROUP BY sẽ gom nhóm dữ liệu và chỉ trả về một record cho một nhóm duy nhất, vì vậy nó giúp giảm bớt dữ liệu không cần thiết trong kết quả trả về.

Lệnh này thường kết hợp với các hàm như: SUM, AVG, MAX, MIN và COUNT để đếm hoặc lấy thông tin cần thiết trả về cho từng nhóm.

Cú pháp như sau:

SELECT 
    c1, c2,..., cn
FROM
    table
WHERE
    where_conditions
GROUP BY c1 , c2,...,cn;

* Lưu ý:

  • Lệnh Group By có khoảng trắng, và nó phải nằm sau lệnh WHERE.
  • Những field có trong group by bắt buộc phải có trong Select.
  • Thứ tự thực thi câu lệnh sẽ là: From -> Where -> Select -> Group By

2. Cách sư dụng Group By trong MySQL

Cho bảng Students có dữ liệu như sau:

student data JPG

Bài toán 1: Hãy lấy danh sách tuổi và số sinh viên có độ tuổi đó.

Với bài toán này ta phải hiển thị hai thông tin: Tuổi | Số sinh viên có độ tuổi này. Ví dụ tuổi 20 thì sẽ có 2 sinh viên, tuổi 21 có 2 sinh viên, tuổi 22 có một sinh viên.

Vì bài toán yêu cầu lấy danh sách theo tuổi nên ta sẽ gom nhóm theo tuổi. Hãy thử câu lệnh sau:

SELECT student_age
FROM students 
	GROUP BY student_age

Kết quả:

student age JPG

Đây không phải là kết quả mong muốn, bởi chưa có thông tin số sinh viên thuộc độ tuổi đó.

Vì kết quả nó trả về 1 record, chính là đại diện cho nhóm nên ta có thể sử dụng hàm Count để đếm số record trong nhóm. Đây cũng chính là số sinh viên thuộc độ tuổi đó. Bạn có thể đếm một field bất kì nhé.

SELECT student_age, COUNT(student_name) AS total_students
FROM students 
	GROUP BY student_age

Kết quả:

student group result 1 JPG

* Ghi nhớ: Các hàm Count, Max, Sum sẽ có tác dụng đến các records trong nhóm ở câu lệnh group by.

Bài toán 2: Đếm tổng số tuổi của tất cả sinh viên và hiển thị theo lớp (class_id).

Bài này ta sử dụng hàm SUM và gom nhóm theo class_id là được.

SELECT  class_id, SUM(student_age) AS total_age
FROM students 
GROUP BY class_id

Kết quả:

group by sum JPG

3. Dùng Having để thêm điều kiện cho Group By

Bạn có thể thêm điều kiện lọc ở lệnh Group By bằng cách sử dụng mệnh đề Having. Lúc này thứ tự chạy sẽ như sau:

  • From -> Where -> Select -> Group By -> Having -> Order By -> Limit

Quay lại dữ liệu ở trên mình sẽ ra một bài toán như sau: Đếm tổng số sinh viên theo từng lớp, và chỉ trả về lớp nào có từ 2 sinh viên trở đi.

Mình sẽ hiển thị lại bảng dữ liệu cho bạn dễ hình dung.

student data JPG

Bạn hãy nhìn thứ tự chạy ở trên để suy ngẫm nhé. Kết quả mong muốn phải được lấy từ lệnh Group By nên điều kiện này không thể đặt ở Where được (where chạy trước group by). Vì vậy ta phải đặt trong Having.

SELECT  class_id, COUNT(student_age) AS total_student
FROM students 
GROUP BY class_id
HAVING total_student >= 2

Kết quả:

having theo lop JPG

Bạn hãy thử đặt điều kiện ở lệnh Where xem thế nào nhé.

SELECT  class_id, COUNT(student_age) AS total_student
FROM students 
WHERE total_student >= 2
GROUP BY class_id

Chạy lên sẽ nhận được lỗi không tồn tại field total_student.

Error Code : 1054
Unknown column 'total_student' in 'where clause'
Execution Time : 00:00:00:000
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:000

Trên là cách sử dụng lệnh Group By và Group By có Having trong MySQL. Hy vọng đây qua bài này bạn sẽ hiểu hơn về lệnh Group By trong MySQL để có cách sử dụng chính xác hơn.

Cùng chuyên mục:

Hàm ENCRYPT trong MySQL

Hàm ENCRYPT trong MySQL

Cách sử dụng ENCRYPT trong MySQL

Hàm MD5 trong MySQL

Hàm MD5 trong MySQL

Cách sử dụng MD5 trong MySQL

Hàm OLD_PASSWORD trong MySQL

Hàm OLD_PASSWORD trong MySQL

Cách sử dụng OLD_PASSWORD trong MySQL

Hàm PASSWORD trong MySQL

Hàm PASSWORD trong MySQL

Cách sử dụng PASSWORD trong MySQL

Hàm ASCII trong MySQL

Hàm ASCII trong MySQL

Cách sử dụng ASCII trong MySQL

Hàm CHAR_LENGTH trong MySQL

Hàm CHAR_LENGTH trong MySQL

Cách sử dụng CHAR_LENGTH trong MySQL

Hàm CHARACTER_LENGTH trong MySQL

Hàm CHARACTER_LENGTH trong MySQL

Cách sử dụng CHARACTER_LENGTH trong MySQL

Hàm CONCAT trong MySQL

Hàm CONCAT trong MySQL

Cách sử dụng CONCAT trong MySQL

Hàm CONCAT_WS trong MySQL

Hàm CONCAT_WS trong MySQL

Cách sử dụng CONCAT_WS trong MySQL

Hàm FIELD trong MySQL

Hàm FIELD trong MySQL

Cách sử dụng FIELD trong MySQL

Hàm FIND_IN_SET trong MySQL

Hàm FIND_IN_SET trong MySQL

Cách sử dụng FIND_IN_SET trong MySQL

Hàm FORMAT trong MySQL

Hàm FORMAT trong MySQL

Cách sử dụng FORMAT trong MySQL

Hàm INSERT trong MySQL

Hàm INSERT trong MySQL

Cách sử dụng INSERT trong MySQL

Hàm INSTR trong MySQL

Hàm INSTR trong MySQL

Cách sử dụng INSTR trong MySQL

Hàm LCASE trong MySQL

Hàm LCASE trong MySQL

Cách sử dụng LCASE trong MySQL

Hàm LEFT trong MySQL

Hàm LEFT trong MySQL

Cách sử dụng LEFT trong MySQL

Hàm LENGTH trong MySQL

Hàm LENGTH trong MySQL

Cách sử dụng LENGTH trong MySQL

Hàm LOCATE trong MySQL

Hàm LOCATE trong MySQL

Cách sử dụng LOCATE trong MySQL

Hàm LOWER trong MySQL

Hàm LOWER trong MySQL

Cách sử dụng LOWER trong MySQL

Hàm LPAD trong MySQL

Hàm LPAD trong MySQL

Cách sử dụng LPAD trong MySQL

Top