집계 함수
집계 함수는 단일 스칼라 값을 리턴하는 값 세트에 대해 조작됩니다. 이 함수는 select 및 subselect 메소드에서 사용할 수 있습니다.
다음 예는 집계를 설명합니다.
SELECT SUM (e.salary) FROM EmpBean e WHERE e.dept.deptno =20
이 집계는 부서 20에 대한 총 급여를 계산합니다.
집계 함수는 AVG, COUNT, MAX, MIN, SUM입니다. 집계 함수 구문은 다음 예에서 설명합니다.
aggregation-function ( [ ALL | DISTINCT ] expression )
또는
COUNT( [ ALL | DISTINCT ] identification-variable )
또는
COUNT( * )
DISTINCT 옵션은 함수를 적용하기 전에 중복 값을 제거합니다. ALL은 기본 옵션이며 중복을 제거하지 않습니다. 널값은 세트의 모든 요소 계수를 리턴하는 COUNT(*) 및 COUNT(식별-변수) 경우를 제외하고 집계 계산 시에 무시됩니다.
데이터 저장소가 Informix인 경우, COUNT 함수 또는 DISTINCT 양식인 SUM, AVG, MIN 및 MAX 함수를 사용하려면 표현식 인수를 단일 값 경로 표현식으로 제한해야 합니다.
리턴 유형 정의
집계 함수를 사용하는 select 메소드의 경우, 리턴 유형을 기본 유형 또는 랩퍼 유형으로 정의할 수 있습니다. 리턴 유형은 데이터 저장소의 리턴 유형과 호환 가능해야 합니다. MAX 및 MIN 함수는 모든 숫자, 문자열 또는 날짜 시간 데이터 유형에 적용할 수 있으며 해당하는 데이터 유형을 리턴합니다. SUM 및 AVG 함수는 입력으로 숫자 유형을 사용하며 데이터 저장소에 사용되는 것과 동일한 숫자 유형을 리턴합니다. COUNT 함수는 모든 데이터 유형을 처리할 수 있으며 정수를 리턴합니다.
비어 있는 세트에 적용되는 경우 SUM, AVG, MAX, MIN 함수는 널값을 리턴할 수 있습니다. COUNT 함수는 비어 있는 세트에 적용될 때 0을 리턴합니다. 리턴 값이 널인 경우 랩퍼 유형을 사용해야 하며 그렇지 않은 경우 컨테이너는 ObjectNotFound 예외를 표시합니다.
GROUP BY 및 HAVING 사용
집계 함수에 대해 사용된 값 세트는 조회의 FROM 및 WHERE 절에서 비롯된 콜렉션으로 판별됩니다. 세트를 그룹으로 나누고 각 그룹에 총계 함수를 적용할 수 있습니다. 이 조치를 수행하려면, 조회에서 GROUP BY 절을 사용하십시오. GROUP BY 절은 경로 표현식 목록을 구성하는 그룹 멤버를 정의합니다. 각 경로 표현식은 byte, short, int, long, float, double, boolean, char의 원시 기본 유형 또는 Byte, Short, Integer, Long, Float, Double, BigDecimal, String, Boolean, Character, java.util.Calendar, java.util.Date, java.sql.Date, java.sql.Time 또는 java.sql.Timestamp의 랩퍼 유형 필드를 지정합니다.
GROUP BY 절을 사용하는 다음 예는 각 부서의 평균 급여를 계산하는 조회입니다.
SELECT e.dept.deptno, AVG ( e.salary) FROM EmpBean e GROUP BY e.dept.deptno
그룹으로 세트를 나눌 때 널값은 다른 널값과 동일하게 간주됩니다.
WHERE 절이 FROM 절에서의 튜플(즉, 리턴 콜렉션 값의 레코드)을 필터링하는 것과 마찬가지로, 총계 함수 또는 그룹화 구성원이 포함된 그룹 특성을 테스트하는 HAVING 절을 사용하여 그룹을 필터링할 수 있습니다.
SELECT e.dept.deptno, AVG ( e.salary) FROM EmpBean e
GROUP BY e.dept.deptno
HAVING COUNT(*) > 3 AND e.dept.deptno > 5
이 조회는 직원이 3명 이상이며 부서 번호가 5보다 큰 부서의 평균 연봉을 리턴합니다.
GROUP BY 절 없이 HAVING 절을 사용할 수도 있으며, 이 경우에 전체 세트는 HAVING 절이 적용되는 단일 그룹으로 처리됩니다.