
여러행 당 하나의 결과를 반환하는 함수를 그룹함수 또는 집계함수라고 한다.
집계 함수에는 일반적으로 다음과 같은 종류가 있다.
그룹 함수 중 sum, avg, median, variance, stddev의 경우 인자 값으로 숫자만 입력할 수 있다. 나머지는 모든 타입의 데이터가 인자로 입력될 수 있다.
일반적으로 집계 함수는 NULL값을 포함하지 않는다. 단, COUNT(*)의 경우 NULL을 포함한 결과를 반환한다.
집계 함수는 중첩해서 사용할 수 없다.
입력된 데이터(열)의 개수를 반환하는 함수이다. 이 때 *를 사용하면 NULL데이터의 개수도 포함하니 주의하자.
SELECT
count(*) -- null 포함
count(commission_pct) -- null 제외
FROM
hr.employees
count안의 데이터에 distinct를 적용할 수 있다. 이 경우 입력된 데이터의 종류의 개수를 확인할 수 있다.
SELECT
count(*) -- null 포함
count(commission_pct) -- null 제외
count(distinct department_id) -- null과 중복 제외
FROM
hr.employees
입력된 숫자 데이터(열)에 대해 총 합을 구하는 함수이다.
SELECT
sum(salary)
FROM
hr.employees
WHERE
department_id = 5;
sum을 이용하면 다음과 같이 데이터를 체크하여 개수를 세는데 활용할 수 있다.
SELECT
count(hire_date) as "TOTAL",
sum(case when to_char(hire_date, 'yyyy') = '2001' then 1 else 0 end) as "2001년"
FROM
hr.employees;
입력된 숫자 데이터에 대해 평균을 구하는 함수이다.
SELECT
round(avg(commission_pct),3) -- null은 제외된 데이터의 평균
FROM
hr.employees;
ex) 입력된 데이터가 1,null,3 일 경우...
반환되는 데이터는 1+3/2 이다.
위의 코드는 null값이 제외되어 있는데 nvl을 이용하면 null값을 포함한 평균 계산을 진행할 수 있다.
SELECT
round(avg(nvl(commission_pct,0)),3) -- null을 포함한 데이터의 평균
FROM
hr.employees;
위 코드는 null 데이터를 0으로 치환한 결과를 반환한다.
ex) 입력된 데이터가 1,null,3 일 경우...
반환되는 데이터는 1+0+3/3 이다.
이때 데이터를 0이 아닌 다른 값으로 변경할 수 있다. 보통 중앙값median이나 평균avg을 넣기도 한다.
입력된 숫자 데이터들의 중앙 값 즉 오름차 순으로 나열했을 때 중간에 위치한 데이터를 반환하는 함수이다.
SELECT
avg(salary), median(salary)
FROM
hr.employees;
이상치 데이터가 있을 경우 평균에 문제가 있을 수 있기 때문에 사용되기도 한다.
입력된 숫자 데이터들의 분산 값을 구하는 함수이다.
분산 : 평균을 기준으로 얼마나 떨어져 있는가 확인. (편차 제곱의 합의 평균)
그렇기에 평균과의 단위 차이가 존재하여 평균과 비교할 때는 표준편차를 사용한다.
SELECT
avg(salary),
variance(salary)
FROM
hr.employees;
입력된 숫자 데이터들의 표준편차를 구하는 함수이다.
SELECT
avg(salary),
variance(salary),
stddev(salary)
FROM
hr.employees;
입력된 숫자 데이터들의 최댓 값, 최솟 값을 구하는 함수이다.
(최댓 값) - (최솟 값)을 통해 입력된 데이터의 범위를 구할 수 있다.
SELECT
max(salary),
min(salary),
max(salary)-min(salary)
FROM
hr.employees;