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 dữ liệu từ nhiều bản ghi đồng nhất vào trong các nhóm.

GROUP BY đứng sau mệnh đề WHERE trong câu lệnh SELECT và đứng trước mệnh đề ORDER BY.

Ở 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.

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

Chú ý mệnh đề GROUP BY phải theo sau các điều kiện trong mệnh đề WHERE và đứng trước mệnh đề ORDER BY nếu được sử dụng.

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 |
 +----+----------+-----+-----------+----------+

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:

 SQL> 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 |
 +----+----------+-----+-----------+----------+

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:

SQL> 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 |
 +---------+-------------+

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é.