Group by sql là gì

  • Nhóm SQL theo Mệnh đề là gì?
  • NHÓM SQL THEO cú pháp
  • Phân nhóm bằng cách sử dụng multiple columns
  • Phân nhóm và aggregate functions
    • Hạn chế kết quả truy vấn bằng cách sử dụng HAVING mệnh đề
  • Bản tóm tắt

Nhóm SQL theo Mệnh đề là gì?

Mệnh đề GROUP BY là một lệnh SQL được sử dụng để group rows that have the same values. Mệnh đề GROUP BY được sử dụng trong câu lệnh SELECT. Theo tùy chọn, nó được sử dụng cùng với các hàm tổng hợp để tạo báo cáo tóm tắt từ cơ sở dữ liệu.

Đó là những gì nó làm, summarizing data từ cơ sở dữ liệu.

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

NHÓM SQL THEO cú pháp

Bây giờ chúng ta đã biết mệnh đề GROUP BY trong SQL là gì, hãy xem cú pháp của một nhóm cơ bản theo truy vấn.

SELECT statements... GROUP BY column_name1[,column_name2,...] [HAVING condition];

HERE

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

Phân nhóm bằng cách sử dụng Cột đơn

Để giúp hiểu tác dụng của mệnh đề SQL Group By, hãy thực hiện một truy vấn đơn giản trả về tất cả các mục nhập từ bảng thành viên.

SELECT `gender` FROM `members` ;

gender
Female
Female
Male
Female
Male
Male
Male
Male
Male

Giả sử chúng ta muốn nhận các giá trị duy nhất cho các giới tính. Chúng ta có thể sử dụng một truy vấn sau:

SELECT `gender` FROM `members` GROUP BY `gender`;

Thực thi tập lệnh trên trong MySQL workbench với Myflixdb cho chúng ta kết quả sau.

Lưu ý chỉ có hai kết quả được trả về. Điều này là do chúng ta chỉ có hai loại giới tính Nam và Nữ. Mệnh đề GROUP BY trong SQL đã nhóm tất cả các Male các thành viên với nhau và chỉ trả về một hàng duy nhất cho nó. Nó đã làm tương tự với Female các thành viên.

Phân nhóm bằng cách sử dụng multiple columns

Giả sử rằng chúng ta muốn nhận danh sách Category_id phim và năm tương ứng mà chúng được phát hành.

Hãy quan sát kết quả đầu ra của truy vấn đơn giản này

SELECT `category_id`,`year_released` FROM `movies` ;

category_id year_released
1 2011
2 2008
NULL 2008
NULL 2010
8 2007
6 2007
6 2007
8 2005
NULL 2012
7 1920
8 NULL
8 1920

Kết quả trên có nhiều điểm trùng lặp.

Hãy thực hiện cùng một truy vấn bằng cách sử dụng nhóm trong SQL –

SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;

Thực thi tập lệnh trên trong MySQL workbench dựa trên myflixdb cho chúng ta kết quả sau được hiển thị bên dưới.

category_id year_released
NULL 2008
NULL 2010
NULL 2012
1 2011
2 2008
6 2007
7 1920
8 1920
8 2005
8 2007

Mệnh đề GROUP BY hoạt động trên cả id danh mục và năm phát hành để xác định unique hàng trong ví dụ trên của chúng tôi.

If the category id is the same but the year released is different, then a row is treated as a unique one .If the category id and the year released is the same for more than one row, then it’s considered a duplicate and only one row is shown.

Phân nhóm và aggregate functions

Giả sử chúng ta muốn có tổng số nam và nữ trong cơ sở dữ liệu của mình. Chúng tôi có thể sử dụng tập lệnh sau được hiển thị bên dưới để làm điều đó.

SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;

Thực thi tập lệnh trên trong MySQL workbench dựa trên myflixdb cho chúng ta kết quả sau.

gender COUNT('membership_number')
Female 3
Male 5

Kết quả hiển thị bên dưới được nhóm theo mọi giá trị giới tính duy nhất đã đăng và số lượng hàng được nhóm được tính bằng cách sử dụng hàm tổng hợp COUNT.

Hạn chế kết quả truy vấn bằng cách sử dụng HAVING mệnh đề

Không phải lúc nào chúng ta cũng muốn thực hiện nhóm trên tất cả dữ liệu trong một bảng nhất định. 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ử chúng ta muốn biết tất cả các năm phát hành cho id loại phim 8. Chúng ta sẽ sử dụng đoạn mã sau để đạt được kết quả của mình.

SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;

Thực thi tập lệnh trên trong MySQL workbench với Myflixdb cho chúng ta kết quả sau được hiển thị bên dưới.

movie_id title director year_released category_id
9 Honey mooners John Schultz 2005 8
5 Daddy's Little Girls NULL 2007 8

Lưu ý rằng chỉ những phim có id danh mục 8 mới bị ảnh hưởng bởi điều khoản GROUP BY của chúng tôi.

Bản tóm tắt

  • Mệnh đề GROUP BY SQL được sử dụng để nhóm các hàng có cùng giá trị.

  • Mệnh đề GROUP BY được sử dụng cùng với câu lệnh SQL SELECT.

  • Câu lệnh SELECT được sử dụng trong mệnh đề GROUP BY chỉ có thể được sử dụng chứa tên cột, hàm tổng hợp, hằng số và biểu thức.

  • Mệnh đề có SQL được sử dụng để hạn chế kết quả trả về bởi mệnh đề GROUP BY.

  • Mệnh đề MYSQL GROUP BY được sử dụng để thu thập dữ liệu từ nhiều bản ghi và bản ghi trả về được thiết lập bởi một hoặc nhiều cột.