Trong SQL, mệnh đề GROUP BY được sử dụng để gom nhóm các bản ghi có cùng dữ liệu tại một số cột cụ thể thành một nhóm. Tức là nếu một cột cụ thể của các dòng khác nhau có giá trị giống nhau thì chúng sẽ được sắp xếp thành một nhóm.
Một số lưu ý:
- Mệnh đề GROUP BY được sử dụng với câu lệnh SELECT.
- Trong SQL, mệnh đề GROUP BY được đặt sau mệnh đề WHERE.
-
Trong SQL, mệnh đề GROUP BY được đặt trước mệnh đề ORDER BY nếu chúng được sử dụng chung.
Mệnh đề GROUP BY
Cú pháp
SELECT column1, function_name(column2) FROM table_name WHERE condition GROUP BY column1, column2 ORDER BY column1, column2; function_name: Tên của các hàm, SUM() , AVG(). table_name:tên của bảng condition:Điều kiện.
Ví chụ cho Table Employee có cấu trúc và dữ liệu như sau:
SI NO | NAME | SALARY | AGE |
1 | Harsh | 2000 | 19 |
2 | Dhanraj | 3000 | 20 |
3 | Dhanraj | 1500 | 19 |
4 | Harsh | 3500 | 19 |
5 | Ashish | 1500 | 19 |
Và bảng Student
SUBJECT | YEAR | NAME |
English | 1 | Harsh |
English | 1 | Pratik |
English | 1 | Ramesh |
English | 2 | Ashish |
English | 2 | Suresh |
Mathematics | 1 | Deepak |
Mathematics | 1 | Sayan |
Ví dụ nhóm theo một cột – nhóm tất cả các hàng có cùng giá trị của chỉ cột cụ thể đó trong một nhóm. Hãy xem xét truy vấn như hình dưới đây:
SELECT NAME, SUM(SALARY) FROM Employee GROUP BY NAME;
Output
Name | Salary |
Ashish | 3000 |
Dhanraj | 3000 |
Harsh | 5500 |
Như bạn có thể thấy trong kết quả ở trên, các hàng có NAME trùng lặp được nhóm dưới cùng một NAME và SALARY tương ứng của chúng là tổng SALARY của các hàng trùng lặp. Hàm SUM () của SQL được sử dụng ở đây để tính tổng.
Ví dụ nhóm theo nhiều cột như GROUP BY column1, column2 – Điều này có nghĩa là đặt tất cả các hàng có cùng giá trị của cả cột column1 và column2 trong một nhóm. Hãy xem xét truy vấn dưới đây:
SELECT SUBJECT, YEAR, Count(*) FROM Student GROUP BY SUBJECT, YEAR;
Output
Subject | Year | Count |
English | 1 | 3 |
English | 2 | 2 |
Mathematics | 1 | 2 |
Như bạn có thể thấy trong kết quả trên, các sinh viên có cùng Subject và Year được xếp vào cùng một nhóm.
Mệnh đề Having
Chúng ta đều biết rằng mệnh đề WHERE được dùng để đặt điều kiện cho các cột trong mệnh đề SELECT. Nhưng đối với mệnh đề GROUP BY thì chúng ta không thể sử dụng WHERE mà là HAVING.
Cú pháp
SELECT column1, function_name(column2) FROM table_name WHERE condition GROUP BY column1, column2 HAVING condition ORDER BY column1, column2; function_name: Tên các hàm, SUM() , AVG(). table_name: Tên table. condition: Điều kiện.
Ví dụ gom nhóm các Employee theo NAME và lọc ra các nhóm có tổng lương lớn hơn 3000
SELECT NAME, SUM(SALARY) FROM Employee GROUP BY NAME HAVING SUM(SALARY)>3000;
Output
Name | Sum(Salary) |
Harsh | 5500 |
Nguồn tham khảo