Mệnh đề GROUP BY trong SQL Server

Mệnh đề GROUP BY trong SQL Server cho phép bạn sắp xếp các hàng của truy vấn theo nhóm. Các nhóm được xác định bởi các cột mà bạn chỉ định trong mệnh đề GROUP BY. Thông thường, GROUP BY được sử dụng để tính tổng theo điều kiện, đếm bản ghi thỏa mãn điều kiện nào đó hoặc tìm dữ liệu MIN, MAX.

Để các bạn dễ theo dõi cách sử dụng GROUP BY trong SQL Server và tiện làm ví dụ, chúng ta sẽ sử dụng bảng dữ liệu dưới đây trong toàn bộ bài viết.

Bảng có tên Quantrimang.com, có 4 cột là IDChuyenmuc, Muccon, Chuyenmuclon, Sobai và 6 hàng như sau:


 +------------+----------+-------------+-------+
 |IDChuyenmuc |  Muccon  |Chuyenmuclon | Sobai |
 +------------+----------+-------------+-------+
 |    1       |SQL Server|Lap trinh    | 101   |
 |    2       |Facebook  |Mang xa hoi  | 152   |
 |    3       |Python    |Lap trinh    | 101   |
 |    4       |JavaScript|Lap trinh    | 122   |
 |    5       |Chrome    |Web          | 94    |
 |    6       |Instagram |Mang xa hoi  | 165   |
 +------------+----------+-------------+-------+
 

Cú pháp mệnh đề GROUP BY trong SQL Server

SELECT
     bieu_thuc1,  bieu_thuc2,...  bieu_thuc_n, 
        ham_tong_hop (bieu_thuc)
 FROM
     ten_bang
 [WHERE dieukien]
 GROUP BY
     bieu_thuc1,
     bieu_thuc2,...;

Tên biến hoặc giá trị biến:

  • bieu_thuc1, bieu_thuc2,... bieu_thuc_n: Biểu thức không nằm bên trong hàm tổng hợp và phải nằm trong mệnh đề GROUP BY.
  • ham_tong_hop: Có thể là các hàm như SUM, COUNT, MIN, MAX hoặc AVG.
  • ten_bang: Bảng cần lấy bản ghi từ đó, phải có ít nhất 1 bảng trong mệnh đề FROM.
  • WHERE dieukien: Tùy chọn. Đây là điều kiện mà bản ghi phải đáp ứng để được chọn.

Ví dụ - dùng hàm SUM

SELECT Chuyenmuclon, SUM(Sobai) AS "Tong"
   FROM [Quantrimang.com]
   GROUP BY Chuyenmuclon;

Ví dụ này dùng hàm tính tổng SUM để trả về tên Chuyenmuclon và tổng số bài viết (Sobai) (theo tên chuyên mục lớn).

Vì bạn đưa ra 1 cột (Chuyenmuclon) trong lệnh SELECT và không nằm trong hàm SUM nên sẽ phải dùng mệnh đề GROUP BY.

Khi đó ta có bảng kết quả trả về như sau:


 +--------------+------+
 | Chuyenmuclon | Tong |
 +--------------+------+
 |Lap trinh     | 324  |
 |Mang xa hoi   | 317  |
 |Web           | 94   |
 +--------------+------+
 

Ví dụ - dùng hàm COUNT

SELECT  COUNT(Chuyenmuclon), Chuyenmuclon
   FROM [Quantrimang.com]
   WHERE Chuyenmuclon = 'Lap trinh'
   GROUP BY Chuyenmuclon;

Ở ví dụ này, hàm COUNT sẽ trả về số lượng Chuyenmuccon của Chuyenmuclon Lap trinh:


 +------+--------------+
 |      | Chuyenmuclon |
 +------+--------------+
 |  3   |  Lap trinh   |
 +------+--------------+
 

Nếu không muốn lấy tên cột mà chỉ cần trả về số lượng mục con, bạn chạy lệnh sau:

SELECT  COUNT(Chuyenmuclon)
   FROM [Quantrimang.com]
   WHERE Chuyenmuclon = 'Lap trinh'
   GROUP BY Chuyenmuclon;

Kết quả trả về sẽ chỉ có số 3.

Ví dụ - dùng hàm MIN

SELECT Chuyenmuclon, MIN(Sobai) AS 'So luong it nhat'
  FROM [Quantrimang.com]
  GROUP BY Chuyenmuclon;

Mệnh đề GROUP BY dùng với hàm MIN ở trên sẽ trả về Chuyenmuclon và số lượng bài ít nhất của mục lớn đó.

Kết quả sau khi dùng hàm MIN

Ví dụ - dùng hàm MAX

SELECT Chuyenmuclon, MAX(Sobai) AS 'So bai cao nhat'
  FROM [Quantrimang.com]
  GROUP BY Chuyenmuclon;

Ví dụ cuối cùng này trả về tên của Chuyenmuclon và số bài cao nhất của chuyên mục.

Kết quả sau khi chạy hàm MAX

Bài trước: Điều kiện EXISTS trong SQL Server

Bài sau: Mệnh đề HAVING trong SQL Server

Thứ Hai, 17/08/2020 09:20
4,49 👨 56.402
0 Bình luận
Sắp xếp theo