Là một phần của hướng dẫn học Oracle SQL, Đây là chi tiết tốt về nhóm của oracle
Các hàm Nhóm không giống như các hàm giá trị đơn lẻ hoạt động trên tập hợp các hàng và trả về một hàng cho mỗi nhóm. Tập hợp các hàng có thể là một bảng toàn bộ hoặc bảng được chia thành các nhóm
Các loại Hàm nhóm trong Oracle bao gồm:
AVG ([Distinction / all] n) | Chỉ kiểu dữ liệu số. Giá trị trung bình của cột n bỏ qua các giá trị rỗng |
COUNT ({* / [Riêng biệt / tất cả] expr}) | Nó chỉ là một hàm nhóm bao gồm các giá trị null. Nó đếm số hàng trong câu lệnh select thỏa mãn mệnh đề where. Đếm (*) bao gồm tất cả các giá trị null và trùng lặp |
MAX ([Riêng biệt / tất cả] expr) | Nó có thể sử dụng với bất kỳ kiểu dữ liệu nào. Nó cung cấp giá trị lớn nhất của expr bỏ qua giá trị null |
MIN ([Riêng biệt / tất cả] expr) | Nó có thể sử dụng với bất kỳ kiểu dữ liệu nào. . Nó cung cấp giá trị tối thiểu là expr bỏ qua giá trị null |
STDDEV ([Riêng biệt / tất cả] n) | Chỉ kiểu dữ liệu số. Nó cung cấp độ lệch chuẩn là n bỏ qua các giá trị rỗng |
SUM ([Riêng biệt / tất cả] n) | Chỉ kiểu dữ liệu số và không thể có các toán tử số học khác trong hàm. nó cung cấp tổng của n bỏ qua giá trị rỗng |
VARIANCE ([Riêng biệt / tất cả] n) | Chỉ kiểu dữ liệu số. Nó cung cấp phương sai của n bỏ qua các giá trị null |
Cú pháp:
SELECT col1, col2, … col_n, aggregate_function (aggregate_expression) FROM tables [WHERE conditions] GROUP BY col1, col2, … col_n Having group condition;
Máy chủ Oracle đã thực hiện các bước sau
- Đầu tiên, các hàng được chọn dựa trên mệnh đề where
- Các hàng được nhóm lại
- Chức năng nhóm được áp dụng cho từng nhóm
- Nhóm phù hợp với tiêu chí trong mệnh đề có được hiển thị
Vì vậy mệnh đề WHERE được đánh giá đầu tiên (hạn chế kết quả truy vấn), sau đó mệnh đề GROUP BY (nhóm các kết quả của WHERE), sau đó là mệnh đề HAVING (hạn chế thêm kết quả, bằng cách hạn chế các nhóm được trả về).
Một số điểm quan trọng về nhóm theo oracle
(1) GROUP BY:Chia nhỏ kết quả của các hàm nhóm từ một bảng dữ liệu lớn thành các nhóm logic nhỏ hơn.
(2) Mệnh đề WHERE không thể hạn chế một nhóm, vì vậy hãy sử dụng mệnh đề HAVING.
(3) Không sử dụng bí danh cột trong mệnh đề GROUP BY.
(4) HAVING:hạn chế hiển thị các nhóm đối với những người “có” các điều kiện cụ thể.
(5) Hàm NVL cho phép một hàm GROUP BY bao gồm các giá trị null trong tính toán của nó.
(6) Bất kỳ cột hoặc biểu thức nào trong danh sách lựa chọn không phải là một hàm tổng hợp phải nằm trong nhóm theo mệnh đề
Ví dụ về Hàm nhóm trong Oracle
Đầu tiên chúng ta hãy tạo các bảng mẫu và sau đó thử nhóm bằng oracle sql
CREATE TABLE "DEPT" ( "DEPTNO" NUMBER(2,0), "DNAME" VARCHAR2(14), "LOC" VARCHAR2(13), CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO") ) CREATE TABLE "EMP" ( "EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2), "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0), CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"), CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO") REFERENCES "DEPT" ("DEPTNO") ENABLE ); insert into DEPT values(10, 'ACCOUNTING', 'NEW YORK'); insert into dept values(20, 'RESEARCH', 'DALLAS'); insert into dept values(30, 'RESEARCH', 'DELHI'); insert into dept values(40, 'RESEARCH', 'MUMBAI'); insert into emp values( 7698, 'Blake', 'MANAGER', 7839, to_date('1-5-2007','dd-mm-yyyy'), 2850, null, 10 ); insert into emp values( 7782, 'Clark', 'MANAGER', 7839, to_date('9-6-2008','dd-mm-yyyy'), 2450, null, 10 ); insert into emp values( 7788, 'Scott', 'ANALYST', 7566, to_date('9-6-2012','dd-mm-yyyy'), 3000, null, 20 ); insert into emp values( 7789, 'TPM', 'ANALYST', 7566, to_date('9-6-2017','dd-mm-yyyy'), 3000, null, null ); insert into emp values( 7560, 'T1OM', 'ANALYST', 7567, to_date('9-7-2017','dd-mm-yyyy'), 4000, null, 20 ); insert into emp values( 7790, 'TOM', 'ANALYST', 7567, to_date('9-7-2017','dd-mm-yyyy'), 4000, null, null ); commit; Select * from emp;
Một cột
Select dept , avg(sal) from emp group by dept;
Nhiều cột
Select deptno ,job, sum(sal) from emp group by deptno,job
Chức năng đếm
SELECT dept, COUNT(*) AS "Np of employees" FROM emp WHERE sal < 15000
GROUP BY dept;
Chức năng tối thiểu
SELECT dept, MIN(sal) AS "Lowest salary" FROM emp
GROUP BY dept;
Hy vọng bạn thích bài viết này
Các bài viết có liên quan
Các hàm phân tích trong oracle:Các hàm Oracle Analytic tính toán giá trị tổng hợp dựa trên nhóm hàng bằng cách sử dụng mệnh đề over partition by oracle, chúng khác với các hàm tổng hợp
xếp hạng trong oracle:RANK, DENSE_RANK và ROW_NUMBER là phân tích oracle hàm được sử dụng để xếp hạng các hàng trong nhóm hàng được gọi là window
Hàm Lead trong oracle:Kiểm tra hàm LAG trong Oracle &hàm Lead trong Oracle, cách sử dụng chúng trong các truy vấn phân tích và cách hoạt động của nó trong Oracle sql
Truy vấn Top-N trong Oracle:Hãy xem trang này để khám phá các cách khác nhau để đạt được các Truy vấn Top-N trong Oracle và Phân trang trong cơ sở dữ liệu oracle truy vấn oracle.