Lệnh GROUP BY trong SQL

Trong SQL, mệnh đề GROUP BY được sử dụng kết hợp với lệnh SELECT để sắp xếp các hàng dữ liệu có cùng điều kiện giá trị nào đó vào trong các nhóm. Ở bài viết này sẽ hướng dẫn chi tiết cho bạn cách sử dụng mệnh đề GROUP BY trong SQL với cú pháp và những ví dụ cụ thể để dễ hình dung và nắm bắt câu lệnh tốt hơn.

GROUP BY đứng sau mệnh đề WHERE trong câu lệnh SELECT và đứng trước mệnh đề ORDER BY. Mệnh đề GROUP BY thường được sử dụng với các hàng tổng hợp như COUNT(), MAX(), MIN(), SUM(), AVG() để nhóm các kết quả theo giá trị 1 hoặc nhiều cột.

Cú pháp lệnh GROUP BY trong SQL

Cú pháp cơ bản của GROUP BY trong SQL như sau:

SELECT cot1, cot2
FROM ten_bang
WHERE [ dieu_kien ]
GROUP BY cot1, cot2
ORDER BY cot1, cot2

Ví dụ về GROUP BY trong SQL

Giả sử bảng NHANVIEN có các bản ghi như sau:

+----+----------+-----+-----------+----------+
| ID | TEN      |TUOI | DIACHI    | LUONG    |
+----+----------+-----+-----------+----------+
|  1 | Thanh    |  32 | Haiphong  |  2000.00 |
|  2 | Loan     |  25 | Hanoi     |  1500.00 |
|  3 | Nga      |  23 | Hanam     |  2000.00 |
|  4 | Manh     |  25 | Hue       |  6500.00 |
|  5 | Huy      |  27 | Hatinh    |  8500.00 |
|  6 | Cao      |  22 | HCM       |  4500.00 |
|  7 | Lam      |  24 | Hanoi     | 10000.00 |
+----+----------+-----+-----------+----------+

Ví dụ 1:

Nếu bạn muốn biết tổng số tiền lương của mỗi nhân viên, thì truy vấn GROUP BY sẽ như sau:

SELECT TEN, SUM(LUONG)
FROM NHANVIEN
GROUP BY TEN;

Kết quả trả về là:

+----------+----------+
| TEN      |SUM(LUONG)|
+----------+----------+
| Cao      |  4500.00 |
| Huy      |  8500.00 |
| Lam      | 10000.00 |
| Loan     |  1500.00 |
| Manh     |  6500.00 |
| Nga      |  2000.00 |
| Thanh    |  2000.00 |
+----------+----------+

Bây giờ, chúng ta có bảng sau với bản sao các tên trùng lặp:

+----+----------+-----+-----------+----------+
| ID | TEN      |TUOI | DIACHI    | LUONG    |
+----+----------+-----+-----------+----------+
|  1 | Thanh    |  32 | Haiphong  |  2000.00 |
|  2 | Thanh    |  25 | Hanoi     |  1500.00 |
|  3 | Nga      |  23 | Hanam     |  2000.00 |
|  4 | Nga      |  25 | Hue       |  6500.00 |
|  5 | Huy      |  27 | Hatinh    |  8500.00 |
|  6 | Cao      |  22 | HCM       |  4500.00 |
|  7 | Lam      |  24 | Hanoi     | 10000.00 |
+----+----------+-----+-----------+----------+

Ví dụ 2:

Nếu bạn muốn biết tổng số tiền lương của mỗi nhân viên, thì truy vấn GROUP BY hiện tại sẽ như sau:

SELECT TEN, SUM(LUONG)
FROM NHANVIEN
GROUP BY TEN;

Kết quả trả về là:

+---------+-------------+
| TEN     | SUM(LUONG)  |
+---------+-------------+
| Huy     |     8500.00 |
| Nga     |     8500.00 |
| Cao     |     4500.00 |
| Lam     |    10000.00 |
| Thanh   |     3500.00 |
+---------+-------------+

Ví dụ 3:

Từ bảng NHANVIEN ban đầu, bạn cần đếm xem từng tỉnh thành có bao nhiêu nhân viên, câu lệnh sẽ như sau:

SELECT COUNT(TEN), DIACHI
FROM NHANVIEN
GROUP BY DIACHI;

Sau khi chạy truy vấn trên, bạn sẽ có bảng kết quả như sau:

+-----------+-----------+
| COUNT(TEN)| DIACHI    |
+-----------+-----------+
| 1         | Haiphong  |
| 1         | Hanam     |
| 2         | Hanoi     |
| 1         | Hatinh    |
| 1         | HCM       |
| 1         | Hue       |
+-----------+-----------+

Ví dụ 4:

Liệt kê số lượng nhân viên theo mỗi địa chỉ và sắp xếp số lượng đếm được từ cao xuống thấp:

SELECT COUNT(TEN), DIACHI
FROM NHANVIEN
GROUP BY DIACHI
ORDER BY COUNT(TEN) DESC;

Ta sẽ có bảng kết quả như sau:

+-----------+-----------+ 
| COUNT(TEN)| DIACHI    | 
+-----------+-----------+ 
| 2         | Hanoi     | 
| 1         | Haiphong  |
| 1         | Hanam     |
| 1         | Hatinh    | 
| 1         | HCM       |
| 1         | Hue       |
+-----------+-----------+

Trong phần tiếp theo, chúng ta sẽ tìm hiểu về từ khóa DISTINCT, các bạn nhớ theo dõi nhé.

Thứ Năm, 15/09/2022 13:53
413 👨 34.085
1 Bình luận
Sắp xếp theo
  • Huy Thành
    Huy Thành

    Vú dụ 3 Group by theo tên là sai nhe


    Thích Phản hồi 06:25 15/09
    • Chàng trai nhạt nhẽo
      Chàng trai nhạt nhẽo

      Mình đã sửa, cảm ơn bạn nha 😉

      Thích Phản hồi 13:55 15/09