Trong bài này chúng ta sẽ tìm hiểu lệnh Group By trong SQL Server, đây là lệnh gop nhóm giúp bạn gom dữ liệu dựa theo một field nào đó.
Group By rất quan trọng trong các câu lệnh liên quan đến thống kê và tính toán, vì vậy bạn cần nắm vững nó không chỉ ở SQL Server mà ở hầu hết các hệ quản trị CSDL hiện nay.
Mục lục
- 1. Cú pháp Group By trong SQL Server
- 2. Group By kết hợp các Function trong SQL Server
- 3. Các ví dụ khác về Group By trong SQL Server
1. Cú pháp Group By trong SQL Server
Nếu bạn đã học series T-SQL thì chắc chắn đã được mình giới thiệu qua về group by rồi. Nếu bạn chưa xem thì hãy quay lại đọc các bài viết ở đó trước nhé.
Gop nhóm hay còn gọi là gom tất cả những dòng trùng nhau thành 1 nhóm đứng cạnh nhau. Tiêu chí để biết trùng nhau hay không sẽ phục thuộc vào danh sách các field mà ta truyền vào ở lệnh Group By.
Cú pháp của Group By trong SQL Server như sau:
1 2 3 4 5 6 7 | SELECT select_list FROM table_name GROUP BY column_name1, column_name2 ,...; |
Trong đó bạn cần lưu ý rằng:
select_list
là danh sách các field muốn lấy, trong đó phải chứa những field mà bạn truyền ở group bytable_name
là tên table bạn muốn truy vấn. Có thể một hoặc nhiều table, thậm chí JOIN và Subquery vẫn được.column_name1
,column_name2
, .. là danh sách các field sẽ group by.
Ví dụ: Lấy danh sách customer_id và năm đặt hàng của hai khách hàng có id là 1 và 2.
1 2 3 4 5 6 7 8 9 | SELECT customer_id, YEAR (order_date) order_year FROM sales.orders WHERE customer_id IN (1, 2) ORDER BY customer_id; |
Kết quả:
Như kết quả bạn thấy là sẽ gom thành hai nhóm như sau:
- Khách hàng ID 1 đặt 1 đơn vào năm 2016 và 2 đơn năm 2018
- Khách hàng ID 2 đặt 2 đơn 2017 và 1 đơn 2018
Bỏ qua tiêu chí xem tổng số đơn, bây giờ mình muốn lấy những năm mà khách hàng có ID 1 và 2 đã đặt hàng.
Với câu hỏi này thì ta phải gom nhóm thêm field order_year
nữa, lúc này nó sẽ bỏ đi những dòng trùng nhau.
1 2 3 4 5 6 7 8 9 10 11 12 | SELECT customer_id, YEAR (order_date) order_year FROM sales.orders WHERE customer_id IN (1, 2) GROUP BY customer_id, YEAR (order_date) ORDER BY customer_id; |
Về mặt chức năng thì ở câu hỏi này ta có thể thay thế bằng lệnh DISTINCT
.
1 2 3 4 5 6 7 8 9 | SELECT DISTINCT customer_id, YEAR (order_date) order_year FROM sales.orders WHERE customer_id IN (1, 2) ORDER BY customer_id; |
2. Group By kết hợp các Function trong SQL Server
Group By trong SQL Server có thể kết hợp với các function như: SUM
, AVG
, MIN
, MAX
để thống kê dữ liệu.
Quay lại bài toán ở trên, bây giờ mình muốn lấy thông tin ID khách hàng, năm mà khách hàng đã đặt và tổng số đơn mà khách đã đặt theo từng năm.
Với yêu cầu này ta sẽ viết lại câu SQL như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 | SELECT customer_id, YEAR (order_date) order_year, COUNT (order_id) order_placed FROM sales.orders WHERE customer_id IN (1, 2) GROUP BY customer_id, YEAR (order_date) ORDER BY customer_id; |
Hàm COUNT là hàm tính tổng số lượng record, nó sẽ tính tổng số record trong nhóm và trả về một số nguyên.
Đây là một ví dụ đơn giản thôi nhé.
3. Các ví dụ khác về Group By trong SQL Server
Hãy thực hành thêm vài ví dụ nữa, mình tin là bạn sẻ hiểu ra vấn đề.
Ví dụ 1: Lấy thông tin thành phố và tổng số khách hàng đang sống ở thành phố đó.
1 2 3 4 5 6 7 8 9 | SELECT city, COUNT (customer_id) customer_count FROM sales.customers GROUP BY city ORDER BY city; |
Ví dụ 2: Lấy thông tin gồm tên thành phố / tên state / tổng số khách hàng sống tai thành phố và state đó.
1 2 3 4 5 6 7 8 9 10 11 12 | SELECT city, state, COUNT (customer_id) customer_count FROM sales.customers GROUP BY state, city ORDER BY city, state; |
Ví dụ 3: Lấy giá nhỏ nhất và cao nhất các sản phẩm sản xuất năm 2018 của từng thương hiệu.
1 2 3 4 5 6 7 8 9 10 11 12 13 | SELECT brand_name, MIN (list_price) min_price, MAX (list_price) max_price FROM production.products p INNER JOIN production.brands b ON b.brand_id = p.brand_id WHERE model_year = 2018 GROUP BY brand_name ORDER BY brand_name; |
Trên là một vài kiến thức cơ bản của lệnh Group By trong SQL Server. Đây là lệnh gom nhóm khá quan trọng, nhất là những bạn DBA phải xuất báo cáo thường xuyên cho sếp. Chúc bạn thực hiện thành công nhé.
* 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/Zalo: 0902912888
👨 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: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Đị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
=============================
oracle tutorial, 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,sql tutorial, khóa học pl/sql tutorial, 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 RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty