Hàm tổng hợp [trước đây gọi là hàm cột] chấp nhận các đối số và trả về một giá trị vô hướng duy nhất là kết quả của việc đánh giá một tập hợp các giá trị giống nhau, chẳng hạn như các giá trị trong một cột trong một tập hợp gồm một hoặc nhiều hàng
Đối số của một hàm tổng hợp là một tập hợp các giá trị bắt nguồn từ một biểu thức. Biểu thức có thể bao gồm các cột, nhưng không thể bao gồm một lựa chọn đầy đủ vô hướng, một hàm tổng hợp khác hoặc một biểu thức XMLQUERY hoặc XMLEXISTS [SQLSTATE 42607]. Phạm vi của tập hợp là một nhóm hoặc một bảng kết quả trung gian.
Nếu một mệnh đề GROUP BY được chỉ định trong một truy vấn và kết quả trung gian của các mệnh đề FROM, WHERE, GROUP BY và HAVING là tập rỗng, thì các hàm tổng hợp sẽ không được áp dụng;
Nếu mệnh đề GROUP BY không được chỉ định trong truy vấn và kết quả trung gian của các mệnh đề FROM, WHERE và HAVING là tập hợp trống, thì các hàm tổng hợp được áp dụng cho tập hợp trống
Ví dụ, kết quả của câu lệnh SELECT sau đây là số lượng giá trị riêng biệt của JOBCODE cho nhân viên trong bộ phận D01.
SELECT COUNT[DISTINCT JOBCODE]
FROM CORPDATA.EMPLOYEE
WHERE WORKDEPT = 'D01'
Từ khóa DISTINCT không được coi là đối số của hàm, mà là đặc tả của thao tác được thực hiện trước khi hàm được áp dụng. Nếu DISTINCT được chỉ định, các giá trị trùng lặp sẽ bị loại bỏ. Khi diễn giải mệnh đề DISTINCT cho các giá trị dấu phẩy động thập phân bằng số, số chữ số có nghĩa trong giá trị không được xem xét. Ví dụ: số dấu phẩy động thập phân 123. 00 không khác biệt với số dấu phẩy động thập phân 123. Biểu diễn của số được trả về từ truy vấn sẽ là bất kỳ biểu diễn nào gặp phải [ví dụ: 123. 00 hoặc 123].
Nếu TẤT CẢ được chỉ định rõ ràng hoặc ngầm định, các giá trị trùng lặp sẽ không bị loại bỏ
Để tương thích với các triển khai SQL khác, UNIQUE có thể được chỉ định làm từ đồng nghĩa với DISTINCT trong các hàm tổng hợp
Các hàm tổng hợp trả về một hàng kết quả duy nhất dựa trên các nhóm hàng, thay vì trên các hàng đơn lẻ. Hàm tổng hợp có thể xuất hiện trong danh sách chọn lọc và trong mệnh đề ORDER
BY
và HAVING
. Chúng thường được sử dụng với mệnh đề GROUP
BY
trong câu lệnh SELECT
, trong đó Cơ sở dữ liệu Oracle chia các hàng của bảng hoặc dạng xem được truy vấn thành các nhóm. Trong một truy vấn có chứa một mệnh đề GROUP
BY
, các thành phần của danh sách lựa chọn có thể là các hàm tổng hợp, các biểu thức, hằng số hoặc biểu thức GROUP
BY
liên quan đến một trong những điều này. Oracle áp dụng các hàm tổng hợp cho từng nhóm hàng và trả về một hàng kết quả duy nhất cho từng nhóm
Nếu bạn bỏ qua mệnh đề GROUP
BY
, thì Oracle sẽ áp dụng các hàm tổng hợp trong danh sách chọn cho tất cả các hàng trong bảng hoặc dạng xem được truy vấn. Bạn sử dụng các hàm tổng hợp trong mệnh đề HAVING
để loại bỏ các nhóm khỏi đầu ra dựa trên kết quả của các hàm tổng hợp, thay vì dựa trên các giá trị của các hàng riêng lẻ của bảng hoặc dạng xem được truy vấn
Nhiều hàm tổng hợp [nhưng không phải tất cả] nhận một đối số duy nhất chấp nhận các mệnh đề này
ORDER
4 vàORDER
5, đồng nghĩa, khiến hàm tổng hợp chỉ xem xét các giá trị riêng biệt của biểu thức đối số. Sơ đồ cú pháp cho các hàm tổng hợp trong chương này sử dụng từ khóaORDER
4 để đơn giản hóaORDER
7 khiến một hàm tổng hợp xem xét tất cả các giá trị, bao gồm tất cả các giá trị trùng lặp
Ví dụ: giá trị trung bình của ORDER
4 của 1, 1, 1 và 3 là 2. Giá trị trung bình của ORDER
7 là 1. 5. Nếu bạn không chỉ định, thì giá trị mặc định là ORDER
7
Một số hàm tổng hợp cho phép BY
1, đây là một phần cú pháp của các hàm phân tích. Tham khảo windowing_clause để biết thông tin về điều khoản này. Trong danh sách các hàm tổng hợp ở cuối phần này, các hàm cho phép BY
1 được theo sau bởi dấu hoa thị [*]
Tất cả các hàm tổng hợp ngoại trừ BY
3[*], BY
4 và BY
5 đều bỏ qua null. Bạn có thể sử dụng hàm BY
6 trong đối số của hàm tổng hợp để thay thế một giá trị cho giá trị rỗng. BY
3 và BY
8 không bao giờ trả về giá trị rỗng mà trả về số hoặc số không. Đối với tất cả các hàm tổng hợp còn lại, nếu tập dữ liệu không chứa hàng hoặc chỉ chứa các hàng có giá trị null làm đối số cho hàm tổng hợp, thì hàm này sẽ trả về giá trị rỗng
Các hàm tổng hợp BY
9, HAVING
0, HAVING
1, HAVING
2, BY
3, HAVING
4 và HAVING
5, khi được theo sau bởi từ khóa HAVING
6, có thể được sử dụng cùng với hàm HAVING
7 hoặc HAVING
8 để hoạt động trên một tập hợp các giá trị từ một tập hợp các hàng xếp hạng . Tham khảo FIRST để biết thêm thông tin
Bạn có thể lồng các hàm tổng hợp. Ví dụ: ví dụ sau tính trung bình của mức lương tối đa của tất cả các phòng ban trong lược đồ mẫu GROUP
1
SELECT AVG[MAX[salary]] FROM employees GROUP BY department_id; AVG[MAX[SALARY]] ---------------- 10926.3333
Tính toán này đánh giá tổng hợp bên trong [HAVING
0[GROUP
3]] cho mỗi nhóm được xác định bởi mệnh đề GROUP
BY
[GROUP
6] và tổng hợp lại các kết quả
Trong danh sách các hàm tổng hợp theo sau, các hàm có dấu hoa thị [*] cho phép BY
1