Thứ Ba, 25 tháng 7, 2023

Lệnh Group By trong SQL Server

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 by
  • table_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_name1column_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ả:

SQL Server GROUP BY clause png

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;

SQL Server GROUP BY clause example png

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;

SQL Server GROUP BY clause example png

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ư: SUMAVGMINMAX để 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.

SQL Server GROUP BY clause expression example png

Đâ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;

SQL Server GROUP BY COUNT example png

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;

SQL Server GROUP BY clause multiple columns example png

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;

SQL Server GROUP BY MIN and MAX example png

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

ĐỌC NHIỀU

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