Thứ Hai, 24 tháng 7, 2023

Gộp kết quả với lệnh Group By trong Oracle

Trong Oracle, lệnh Group By dùng kết hợp với lệnh SELECT để lấy dữ liệu, sau đó gộp dữ liệu lại theo một cột hoặc nhiều cột. Giống như lệnh DISTINCT, lệnh GROUP BY sẽ gộp dữ liệu trùng, tuy nhiên nó chỉ gộp dựa vào columns mà ta đã khai báo.

Mục lục

  • 1. Cú pháp lệnh Group By trong Oracle
  • 2. Sử dụng Group By với hàm COUNT trong Oracle
  • 3. Sử dụng Group By với hàm MIN/MAX trong Oracle
  • 4. Lời kết

1. Cú pháp lệnh Group By trong Oracle

Sau đây là cú pháp của lệnh Group By trong Oracle.

1
2
3
4
SELECT column1, column2, column3, ...
FROM tables 
WHERE conditions 
GROUP BY column1, column2, column3, ...

Như vậy Group By sẽ đặt cuối cùng trong lệnh SELECT.

Có một lưu ý quan trọng, đó là các cột mà bạn muốn group by bắt buộc phải có trong select, bởi vì theo quy luật chạy thì bạn không select thì ở group by không có dữ liệu để gom nhóm.

Ví dụ: ở group by mình có group theo namecity nên select phải có chọn cái đó.

1
2
3
SELECT city, name, SUM(sale) AS "Total sales"
FROM salesdepartment 
GROUP BY city, name;

Khi sử dụng lệnh group by, nếu bạn sử dụng các hàm như SUMCOUNT ở các column có group by thì kết quả trả về là toàn bộ các records ở dạng gộp lại. Ví dụ hàm SUM thì trả về tổng tất cả giá trị các record, COUNT thì đêm số record.

2. Sử dụng Group By với hàm COUNT trong Oracle

Sau đây là một vài ví dụ, bạn hãy thực hành để hiểu rõ nó hơn nhé, vì đây là lệnh rất khó hiểu với những bạn mới học.

Trước tiên mình sẽ tạo một bảng CUSTOMERS bằng lệnh sau:

1
2
3
4
5
6
CREATE TABLE  "CUSTOMERS"  
   (    "NAME" VARCHAR2(4000),  
    "AGE" NUMBER,  
    "SALARY" NUMBER,  
    "STATE" VARCHAR2(4000) 
   )

Và mình đã thêm một số dữ liệu như sau:

Yêu cầu: Bây giờ mình muốn đếm tổng khách hàng của mỗi state có mức lương lớn hơn 1000.

Theo như yêu cầu thì kết quả sẽ trả về dạng như sau:

Như vậy ta sẽ group by theo state, và mỗi state sẽ đếm có bao nhiêu record, số record đó chính là tổng số khách hàng của state đó.

1
2
3
4
SELECT state, COUNT(*) AS "Number of customers" 
FROM customers 
WHERE salary > 10000 
GROUP BY state;

3. Sử dụng Group By với hàm MIN/MAX trong Oracle

Mình sẽ đưa ra một ví dụ nữa để bạn tham khảo.

Giả sử mình có bảng employees như sau:

1
2
3
4
5
6
7
CREATE TABLE  "EMPLOYEES"  
   (    "EMP_ID" NUMBER,  
    "NAME" VARCHAR2(4000),  
    "AGE" NUMBER,  
    "DEPARTMENT" VARCHAR2(4000),  
    "SALARY" NUMBER 
   )

Và đây là dữ liệu mẫu:

Bây giờ mình muốn lấy nhân viên có mức lương nhỏ nhất của từng phòng ban. Như vậy mình sẽ group by theo department và dùng hàm MIN tại salary ở lệnh select, hàm MIN sẽ chọn ra record có mức lương thấp nhất.

1
2
3
4
SELECT department,  
MIN(salary) AS "Lowest salary" 
FROM employees 
GROUP BY department;

Kết quả như sau:


Nếu bạn muốn chọn mức lương lớn nhất thì thay hàm MIN bằng hàm MAX.

1
2
3
4
SELECT department, 
MAX(salary) AS "Highest salary" 
FROM employees 
GROUP BY department;

Kết quả như sau:

4. Lời kết

Như vậy là mình đã giới thiệu xong lệnh Group by trong Oracle, đây là lệnh tương đối hay vì nó giúp bạn thống  kê truy vấn khá tốt. Hy vọng bạn thực hành nhuần nhuyễn với lệnh này, nếu không bạn sẽ không thể đi làm được đâu 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