Thứ Ba, 15 tháng 3, 2022

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 dbaviet.vn, 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   |
+------------+----------+-------------+-------+

GROUP BY trong SQL Server

  • Cú pháp mệnh đề GROUP BY trong SQL Server
  • Ví dụ - dùng hàm SUM
  • Ví dụ - dùng hàm COUNT
  • Ví dụ - dùng hàm MIN
  • Ví dụ - dùng hàm MAX

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 [dbaviet.vn]
  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 [dbaviet.vn]
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 [dbaviet.vn]
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 [dbaviet.vn]
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 đó.

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

SELECT Chuyenmuclon, MAX(Sobai) AS 'So bai cao nhat'
 FROM [dbaviet.vn]
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.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile: 0902912888
⚡️ Skype: tranbinh48ca
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,khóa học pl/sql, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master