Tags:

Gom nhóm dữ liệu với GROUP BY trong SQL

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

https://www.geeksforgeeks.org/sql-group-by/

5 1 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x