Trong bài viết SQL này, chúng ta sẽ tìm hiểu về mệnh đề GROUP BY và cách sử dụng nó trong SQL. Chúng ta cũng sẽ thảo luận về việc sử dụng mệnh đề GROUP BY với mệnh đề WHERE.
Mệnh đề GROUP BY là gì?
Mệnh đề GROUP BY là một mệnh đề SQL được sử dụng trong câu lệnh SELECT để quản lý các bản ghi giống nhau của một cột trong nhóm bằng cách sử dụng các hàm SQL.
Cú pháp của mệnh đề GROUP BY:
SELECT columnname1, columnname2, columnname3 FROM tablename GROUP BY columnname;
Chúng ta có thể sử dụng nhiều cột từ bảng trong mệnh đề GROUP BY.
Có một số bước, chúng ta phải tìm hiểu cách sử dụng mệnh đề GROUP BY trong truy vấn SQL:
1. Tạo cơ sở dữ liệu mới hoặc sử dụng cơ sở dữ liệu hiện có bằng cách chọn cơ sở dữ liệu bằng từ khóa USE theo sau là tên cơ sở dữ liệu.
2. Tạo một bảng mới bên trong cơ sở dữ liệu đã chọn hoặc bạn có thể sử dụng một bảng đã được tạo.
3. Nếu bảng mới được tạo, hãy chèn các bản ghi vào cơ sở dữ liệu mới được tạo bằng cách sử dụng truy vấn INSERT và xem dữ liệu được chèn bằng truy vấn SELECT không có mệnh đề GROUP BY.
4. Bây giờ, chúng ta đã sẵn sàng sử dụng mệnh đề GROUP BY trong các truy vấn SQL.
Bước 1:Tạo cơ sở dữ liệu mới hoặc sử dụng cơ sở dữ liệu đã được tạo.
Tôi đã tạo một cơ sở dữ liệu. Tôi sẽ sử dụng tên cơ sở dữ liệu đã tạo hiện có của mình, Công ty.
USE Company;
Công ty là tên cơ sở dữ liệu.
Những người chưa tạo cơ sở dữ liệu hãy làm theo truy vấn dưới đây để tạo cơ sở dữ liệu:
CREATE DATABASE database_name;
Sau khi tạo cơ sở dữ liệu, hãy chọn cơ sở dữ liệu bằng cách sử dụng từ khóa USE, theo sau là tên cơ sở dữ liệu.
Bước 2:Tạo bảng mới hoặc sử dụng bảng đã có:
Tôi đã tạo một bảng. Tôi sẽ sử dụng bảng hiện có có tên Nhân viên.
Để tạo bảng mới, hãy làm theo cú pháp TẠO BẢNG bên dưới:
CREATE TABLE table_name(
columnname1 datatype(column size),
columnname2 datatype(column size),
columnname3 datatype(column size)
);
Bước 3:Chèn các bản ghi vào bảng mới tạo bằng truy vấn INSERT và xem các bản ghi bằng truy vấn CHỌN.
Sử dụng cú pháp sau để chèn các bản ghi mới trong bảng:
INSERT INTO table_name VALUES(value1, value2, value3);
Sử dụng cú pháp sau để xem các bản ghi từ bảng:
SELECT * FROM table_name;
Truy vấn sau sẽ hiển thị hồ sơ của Nhân viên:
SELECT * FROM Employees;
Kết quả của truy vấn SELECT ở trên là:
EMPLOYEEID | FIRST_NAME | LAST_NAME | TIỀN LƯƠNG | THÀNH PHỐ | KHOA | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C # | 5 |
1003 | NIKHIL | VANI | 50500 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | ĐIỀU CHỈNH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | C # | 5 |
3001 | PRANOTI | CHIA SẺ | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | DÂY | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | MỤC TIÊU | 60500 | MUMBAI | KIỂM TRA | 4 |
4002 | ASHWINI | TÚI XÁCH | 54500 | NOIDA | JAVA | 3 |
4003 | RUCHIKA | AGARWAL | 60000 | DELHI | ORACLE | 1 |
5001 | ARCHIT | SHARMA | 55500 | DELHI | KIỂM TRA | 4 |
5002 | SANKET | CHAUHAN | 70000 | HYDERABAD | JAVA | 3 |
5003 | ROSHAN | NEHTE | 48500 | ĐIỀU CHỈNH | C # | 5 |
6001 | RAHUL | NIKAM | 54500 | BANGALORE | KIỂM TRA | 4 |
6002 | TẠP CHÍ | JADHAV | 60500 | BANGALORE | C # | 5 |
6003 | NIKITA | INGALE | 65000 | HYDERABAD | ORACLE | 1 |
Bước 4:Chúng tôi đã sẵn sàng sử dụng mệnh đề GROUP BY trong các truy vấn
Bây giờ chúng ta sẽ đi sâu vào mệnh đề GROUP BY với sự trợ giúp của các ví dụ
Ví dụ 1: Viết truy vấn để hiển thị nhóm hồ sơ nhân viên theo thành phố.
SELECT * FROM EMPLOYEES GROUP BY CITY;
Truy vấn trên hiển thị hồ sơ của nhân viên trong đó nhân viên từ cùng một thành phố sẽ được coi là một nhóm. Ví dụ:nếu có 10 bản ghi nhân viên trong bảng trong đó 3 người đến từ thành phố Pune, 3 người đến từ thành phố Mumbai, 2 bản ghi từ Hyderabad và Bangalore, thì truy vấn trên sẽ nhóm nhân viên thành phố Pune thành phố Mumbai thành một bản ghi, v.v. .
Kết quả của truy vấn trên:
EMPLOYEEID | FIRST_NAME | LAST_NAME | TIỀN LƯƠNG | THÀNH PHỐ | KHOA | MANAGERID |
6001 | RAHUL | NIKAM | 54500 | BANGALORE | KIỂM TRA | 4 |
2001 | PRACHI | SHARMA | 55500 | ĐIỀU CHỈNH | ORACLE | 1 |
4003 | RUCHIKA | AGARWAL | 60000 | DELHI | ORACLE | 1 |
5002 | SANKET | CHAUHAN | 70000 | HYDERABAD | JAVA | 3 |
1003 | NIKHIL | VANI | 50500 | JAIPUR | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | C # | 5 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C # | 5 |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
Như chúng ta có thể thấy rằng hồ sơ của nhân viên được nhóm theo thành phố và hồ sơ được hiển thị theo thứ tự tăng dần theo mặc định.
Ví dụ 2: Viết truy vấn để hiển thị nhóm hồ sơ của nhân viên theo mức lương theo thứ tự giảm dần.
SELECT * FROM EMPLOYEES GROUP BY SALARY DESC;
Truy vấn trên hiển thị hồ sơ của nhân viên trong đó những nhân viên có cùng mức lương sẽ được coi là một nhóm và hồ sơ sẽ hiển thị theo thứ tự giảm dần.
Kết quả của truy vấn trên:
EMPLOYEEID | FIRST_NAME | LAST_NAME | TIỀN LƯƠNG | THÀNH PHỐ | KHOA | MANAGERID |
5002 | SANKET | CHAUHAN | 70000 | HYDERABAD | JAVA | 3 |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
6003 | NIKITA | INGALE | 65000 | HYDERABAD | ORACLE | 1 |
4001 | RAJESH | MỤC TIÊU | 60500 | MUMBAI | KIỂM TRA | 4 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C # | 5 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
2001 | PRACHI | SHARMA | 55500 | ĐIỀU CHỈNH | ORACLE | 1 |
4002 | ASHWINI | TÚI XÁCH | 54500 | NOIDA | JAVA | 3 |
1003 | NIKHIL | VANI | 50500 | JAIPUR | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | C # | 5 |
5003 | ROSHAN | NEHTE | 48500 | ĐIỀU CHỈNH | C # | 5 |
Như chúng ta có thể thấy, hồ sơ của nhân viên được nhóm theo mức lương và hồ sơ được hiển thị theo thứ tự giảm dần, như chúng tôi đề cập đến phần mô tả ở cuối.
Ví dụ 3: Viết truy vấn để hiển thị nhóm hồ sơ của nhân viên theo mức lương và thành phố.
SELECT * FROM EMPLOYEES GROUP BY SALARY, CITY;
Truy vấn trên hiển thị hồ sơ của nhân viên trong đó những nhân viên có cùng mức lương và thành phố sẽ được coi là một nhóm.
Ví dụ, giả sử bảng có 10 bản ghi nhân viên. Từ 10 nhân viên lương của 2 nhân viên và thành phố khớp với hai nhân viên khác và sáu nhân viên còn lại lương và thành phố là không trùng khớp thì 6 nhân viên sẽ được coi là 6 nhóm riêng biệt và 2 nhân viên khớp với 2 nhân viên khác sẽ được coi là một nhóm . Tóm lại, 8 nhóm sẽ được thành lập.
Kết quả của truy vấn trên:
EMPLOYEEID | FIRST_NAME | LAST_NAME | TIỀN LƯƠNG | THÀNH PHỐ | KHOA | MANAGERID |
5003 | ROSHAN | NEHTE | 48500 | ĐIỀU CHỈNH | C # | 5 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | C # | 5 |
1003 | NIKHIL | VANI | 50500 | JAIPUR | FMW | 2 |
6001 | RAHUL | NIKAM | 54500 | BANGALORE | KIỂM TRA | 4 |
4002 | ASHWINI | TÚI XÁCH | 54500 | NOIDA | JAVA | 3 |
2001 | PRACHI | SHARMA | 55500 | ĐIỀU CHỈNH | ORACLE | 1 |
5001 | ARCHIT | SHARMA | 55500 | DELHI | KIỂM TRA | 4 |
3001 | PRANOTI | CHIA SẺ | 55500 | PUNE | JAVA | 3 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4003 | RUCHIKA | AGARWAL | 60000 | DELHI | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C # | 5 |
6002 | TẠP CHÍ | JADHAV | 60500 | BANGALORE | C # | 5 |
4001 | RAJESH | MỤC TIÊU | 60500 | MUMBAI | KIỂM TRA | 4 |
6003 | NIKITA | INGALE | 65000 | HYDERABAD | ORACLE | 1 |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
5002 | SANKET | CHAUHAN | 70000 | HYDERABAD | JAVA | 3 |
Như chúng ta có thể thấy, hồ sơ của nhân viên được nhóm theo mức lương và thành phố, và hồ sơ được hiển thị theo thứ tự tăng dần theo mặc định.
Ví dụ 4: Viết truy vấn để hiển thị hồ sơ của nhân viên theo thành phố và bộ phận.
SELECT * FROM EMPLOYEES GROUP BY CITY, DEPARTMENT;
Truy vấn trên hiển thị hồ sơ của nhân viên trong đó nhân viên ở cùng một thành phố và bộ phận sẽ được coi là một nhóm.
Kết quả của truy vấn trên:
EMPLOYEEID | FIRST_NAME | LAST_NAME | TIỀN LƯƠNG | THÀNH PHỐ | KHOA | MANAGERID |
6002 | TẠP CHÍ | JADHAV | 60500 | BANGALORE | C # | 5 |
6001 | RAHUL | NIKAM | 54500 | BANGALORE | KIỂM TRA | 4 |
5003 | ROSHAN | NEHTE | 48500 | ĐIỀU CHỈNH | C # | 5 |
2001 | PRACHI | SHARMA | 55500 | ĐIỀU CHỈNH | ORACLE | 1 |
4003 | RUCHIKA | AGARWAL | 60000 | DELHI | ORACLE | 1 |
5001 | ARCHIT | SHARMA | 55500 | DELHI | KIỂM TRA | 4 |
5002 | SANKET | CHAUHAN | 70000 | HYDERABAD | JAVA | 3 |
6003 | NIKITA | INGALE | 65000 | HYDERABAD | ORACLE | 1 |
1003 | NIKHIL | VANI | 50500 | JAIPUR | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | C # | 5 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | MỤC TIÊU | 60500 | MUMBAI | KIỂM TRA | 4 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C # | 5 |
4002 | ASHWINI | TÚI XÁCH | 54500 | NOIDA | JAVA | 3 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
3001 | PRANOTI | CHIA SẺ | 55500 | PUNE | JAVA | 3 |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
Như chúng ta có thể thấy, hồ sơ của nhân viên được nhóm theo thành phố và bộ phận, và hồ sơ được hiển thị theo thứ tự tăng dần theo mặc định.
Ví dụ 5: Viết truy vấn để đếm danh sách nhân viên trong từng bộ phận từ bảng nhân viên.
SELECT DEPARTMENT, COUNT(DEPARTMENT) FROM EMPLOYEES GROUP BY DEPARTMENT;
Truy vấn trên hiển thị số lượng nhân viên trong từng nhóm phòng ban theo bộ phận. Giống như sáu nhân viên làm việc trong bộ phận nhân sự, năm nhân viên làm việc trong một bộ phận khác.
Kết quả của truy vấn trên:
KHOA | COUNT (BỘ PHẬN) |
C # | 4 |
FMW | 3 |
JAVA | 4 |
ORACLE | 4 |
KIỂM TRA | 3 |
Như chúng ta có thể thấy, bốn nhân viên làm việc trong Bộ phận C #, ba nhân viên làm việc trong Bộ phận FMW, v.v.
Ví dụ 6: Viết truy vấn để đếm danh sách nhân viên từ mỗi thành phố từ bảng nhân viên.
SELECT CITY, COUNT(CITY) FROM EMPLOYEES GROUP BY CITY;
Truy vấn trên hiển thị số lượng nhân viên trong từng nhóm thành phố theo thành phố. Giống như ba nhân viên làm việc từ thành phố Pune, bốn nhân viên làm việc từ thành phố khác, v.v.
Kết quả của truy vấn trên:
CITY | COUNT (THÀNH PHỐ) |
BANGALORE | 2 |
ĐIỀU CHỈNH | 2 |
DELHI | 2 |
HYDERABAD | 2 |
JAIPUR | 2 |
MUMBAI | 3 |
NOIDA | 2 |
PUNE | 3 |
Như chúng ta có thể thấy, hai nhân viên làm việc từ thành phố Bangalore, ba nhân viên làm việc từ thành phố Mumbai, v.v.
Ví dụ 7: Viết một truy vấn để tổng hợp nhóm lương của nhân viên theo thành phố.
SELECT CITY, SUM(SALARY) AS SALARY FROM EMPLOYEES GROUP BY CITY;
Ở trên được sử dụng để tổng hợp tiền lương của nhân viên được nhóm theo tên thành phố. Ví dụ, đối với nhân viên từ cùng một thành phố, lương của họ sẽ là tổng và được coi là một nhóm. Chúng tôi đã sử dụng hàm tổng hợp theo sau là cột lương để thêm lương.
Kết quả của truy vấn trên:
CITY | TIỀN LƯƠNG |
BANGALORE | 115000 |
ĐIỀU CHỈNH | 104000 |
DELHI | 115500 |
HYDERABAD | 135000 |
JAIPUR | 101000 |
MUMBAI | 169000 |
NOIDA | 114500 |
PUNE | 186500 |
Như chúng ta có thể thấy, tổng mức lương của thành phố Bangalore là 115000, tổng mức lương của thành phố Chandigarh là 104000, là phần cộng thêm vào mức lương của nhân viên khác nhau, nhưng từ thành phố, mỗi thành phố đều sử dụng cùng một cách tiếp cận.
Ví dụ 8: Viết truy vấn để tìm mức lương tối thiểu từ mỗi bộ phận.
SELECT DEPARTMENT, MIN(SALARY) FROM EMPLOYEES GROUP BY DEPARTMENT;
Truy vấn trên được sử dụng để tìm mức lương tối thiểu của nhân viên từ mỗi bộ phận. Mức lương của một trong những nhân viên của bộ phận Java là 54500, mức lương thấp nhất trong toàn bộ bộ phận java. 48500 tương tự là mức lương thấp nhất được trả cho nhân viên trong bộ phận C #.
Kết quả của truy vấn trên:
KHOA | MIN (LƯƠNG) |
C # | 48500 |
FMW | 50500 |
JAVA | 54500 |
ORACLE | 55500 |
KIỂM TRA | 54500 |
Như chúng ta thấy, 50500 là mức lương thấp nhất trả cho một trong những nhân viên trong bộ phận FMW, 55500 là mức lương thấp nhất trả cho một trong những nhân viên trong bộ phận ORACLE.
Ví dụ 9: Viết một truy vấn để tìm mức lương tối thiểu từ mỗi thành phố.
SELECT CITY, MAX(SALARY) FROM EMPLOYEES GROUP BY CITY;
Truy vấn trên được sử dụng để tìm mức lương tối đa từ mỗi thành phố. Mức lương của một trong những nhân viên ở thành phố Pune là 65500, cao nhất trong toàn thành phố Pune, cùng 60500 là mức lương cao nhất được trả cho nhân viên ở thành phố Mumbai.
Kết quả của truy vấn trên:
CITY | MAX (LƯƠNG) |
BANGALORE | 60500 |
ĐIỀU CHỈNH | 55500 |
DELHI | 60000 |
HYDERABAD | 70000 |
JAIPUR | 50500 |
MUMBAI | 60500 |
NOIDA | 60000 |
PUNE | 65500 |
Như chúng ta thấy, 50500 là mức lương cao nhất trả cho một trong những nhân viên ở thành phố Jaipur, 55500 là mức lương cao nhất trả cho một trong những nhân viên ở thành phố Chandigarh.