Tìm hiểu về mệnh đề GROUP BY và HAVING trong MySQL

Nội dung được viết bởi G-LEARNING

Mệnh đề GROUP BY là gì?

Mệnh đề GROUP BY là một lệnh SQL được sử dụng để nhóm các hàng có cùng một giá trị. Nó thường được sử dụng trong câu lệnh SELECT. 

GROUP BY là mệnh đề tùy chọn và thường được sử dụng cùng với các hàm tổng hợp với mục đích tạo các báo cáo tóm tắt từ cơ sở dữ liệu. Hay nói cách khác, GROUP BY hỗ trợ tóm tắt dữ liệu từ cơ sở dữ liệu.

Các câu truy vấn có chứa mệnh đề GROUP BY được gọi là các truy vấn nhóm và chỉ trả về một hàng cho mỗi mục được nhóm

Cú pháp GROUP BY

Hãy cùng xem xét cú pháp của GROUP BY:

Tìm hiểu về mệnh đề GROUP BY và HAVING trong MySQL

Trong đó:

  • “SELECT statements…” là câu lệnh SELECT SQL tiêu chuẩn
  • “GROUP BY column_name1” là mệnh đề thực hiện nhiệm vụ phân nhóm dựa trên tên cột column_name1
  • “[,column_name2,…]” (tùy chọn) : đại diện cho tên cột khác khi việc phân nhóm được thực hiện dựa trên nhiều cột
  • “[HAVING condition]” (tùy chọn): được sử dụng để giới hạn các hàng bị ảnh hưởng bởi mệnh đề GROUP BY. Tương tự như mệnh đề WHERE.

Ví dụ về GROUP BY

Phân nhóm dựa trên một cột

Để hiểu được ảnh hưởng của mệnh đề GROUP BY, trước tiên chúng ta thực hiện một truy vấn đơn giản là trả về tất cả các mục nhập giới tính từ bảng members:

Tìm hiểu về mệnh đề GROUP BY và HAVING trong MySQL
Tìm hiểu về mệnh đề GROUP BY và HAVING trong MySQL

Giả sử rằng chúng ta muốn hiển thị một giá trị duy nhất cho mỗi loại giới tính, sử dụng câu truy vấn sau :

Tìm hiểu về mệnh đề GROUP BY và HAVING trong MySQL

Sau khi thực hiện câu truy vấn trên, kết quả sẽ trả về như sau:

Tìm hiểu về mệnh đề GROUP BY và HAVING trong MySQL

Lưu ý là chỉ có hai kết quả được trả lại bởi vì chúng ta chỉ có hai loại giới tính là Male và Female. Mệnh đề GROUP BY đã nhóm tất cả các thành viên “Male” lại với nhau và trả về một hàng duy nhất. Điều này cũng được thực hiện tương tự với tất cả thành viên là “Female”.

Phân nhóm dựa trên nhiều cột

Giả sử rằng chúng ta muốn lấy danh sách ID của tất cả các thể loại phim và năm phát hành tương ứng của chúng từ bảng movies. Thực hiện câu truy vấn sau:

Tìm hiểu về mệnh đề GROUP BY và HAVING trong MySQL
Tìm hiểu về mệnh đề GROUP BY và HAVING trong MySQL

Kết quả trên cho một số thông tin trùng lặp.

Khi thực hiện câu truy vấn trên cùng với GROUP BY:

Tìm hiểu về mệnh đề GROUP BY và HAVING trong MySQL
Tìm hiểu về mệnh đề GROUP BY và HAVING trong MySQL

GROUP BY hoạt động trên cả category_id và year_released để xác định hàng duy nhất trong ví dụ trên. 

Nếu category_id giống nhau nhưng year_released khác nhau, thì mỗi hàng được coi là một hàng chứa thông tin duy nhất. Nếu category_id và year_released giống nhau cho nhiều hơn một hàng thì nó được xem là trùng lặp và chỉ hiển thị một hàng trong kết quả. 

Phân nhóm với các hàm tổng hợp

Giả sử chúng ta muốn biết tổng số nam và nữ trong cơ sở dữ liệu thì có thể thực hiện câu lệnh sau đây:

Tìm hiểu về mệnh đề GROUP BY và HAVING trong MySQL

Chạy câu lệnh trên cho ra kết quả:

Tìm hiểu về mệnh đề GROUP BY và HAVING trong MySQL

Kết quả trên được nhóm theo từ giá trị giới tính duy nhất và số lượng hàng trong nhóm được tính bằng hàm tổng hợp COUNT

Giới hạn kết quả truy vấn bằng mệnh đề HAVING

Không phải trong trường hợp nào chúng ta cũng muốn nhóm tất cả các dữ liệu trong cùng một bảng. Sẽ có lúc chúng ta muốn giới hạn kết quả của mình theo một tiêu chí nhất định. Trong những trường hợp như vậy, chúng ta có thể sử dụng mệnh đề HAVING.

Giả sử rằng chúng ta muốn biết tất cả các năm phát hành cho một thể loại phim có ID là 8. Thực hiện câu lệnh sau:

Tìm hiểu về mệnh đề GROUP BY và HAVING trong MySQL

Kết quả được hiển thị:

Tìm hiểu về mệnh đề GROUP BY và HAVING trong MySQL

Lưu ý rằng ở đây chỉ những phim có category_id là 8 mới bị ảnh hưởng bởi mệnh đề GROUP BY.

Kết luận

  • Mệnh đề GROUP BY được sử dụng để nhóm các hàng có cùng một giá trị
  • Mệnh đề GROUP BY được sử dụng với câu lệnh truy vấn SELECT.
  • Câu lệnh SELECT có chứa mệnh đề GROUP BY chỉ có thể chứa tên cột, hàm tổng hợp, hằng số và biểu thức
  • Mệnh đề HAVING dùng để giới hạn các kết quả được trả về bởi mệnh lệnh GROUP BY

Các bạn có thể tham khảo thêm các bài viết khác về cách sử dụng MySQL:

Hướng dẫn sử dụng câu lệnh SELECT trong MySQL qua các ví dụ

Hướng dẫn câu lệnh DELETE trong MySQL và ví dụ minh họa

Hướng dẫn câu lệnh UPDATE trong MySQL và các ví dụ



Đánh giá bài viết này

0/5 - (0 bình chọn)

0/5 - (0 bình chọn)

0 thảo luận

@ 2020 - Bản quyền của Công ty cổ phần công nghệ giáo dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở kế hoạch và đầu tư TP. Hà Nội
Giấy phép mạng xã hội số: 588, cấp bởi Bộ thông tin và truyền thông