본문 바로가기
DataBase/Oracle

함수/그룹 처리 함수) 그룹 함수 (sum, avg, count, max, min)

by 박채니 2022. 4. 18.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


FUNCTION

- 일련의 작업 절차를 모아 놓은 database 객체

- 호출 시 인자를 전달하고 리턴 값을 받아 처리

- SQL의 function은 반드시 리턴 값을 가짐

함수 유형
단일행
처리 함수
문자 처리 함수
숫자 처리 함수
날짜 처리 함수
형변환 처리 함수
기타 함수
그룹
처리 함수
그룹마다 호출

그룹 처리 함수

- 전체 행을 하나의 그룹으로 처리해서 그룹 당 하나의 결과를 반환

- group by절을 통해 세부 그룹 처리 가능

- 그룹 함수의 결과와 일반 컬럼을 동시에 사용할 수 없음

- 컬럼 값이 null인 경우는 연산 처리 하지 않음

 

☞ sum(col)

- 해당 col을 모두 더한 값을 리턴

select
--    emp_name, --ORA-00937: not a single-group group function   
    sum(salary)
from
    employee;

그룹함수의 결과 (sum(salary))와 일반 컬럼 (emp_name)을 동시에 사용하면

"ORA-00937: not a single-group group function" 해당 에러 메시지와 함께 오류가 뜨게 되니 주의해야 합니다.

 

 

☞ avg(col)

- 해당 col의 평균 값을 리턴

select
    trunc(avg(salary))
from
    employee;

 

 

☞ count(col)

- 컬럼 값이 null이 아닌 컬럼 수를 반환

select
    count(emp_id),
    count(emp_name),
    count(dept_code),   -- null 값이 있기 때문에 제외된 수를 반환
    count(bonus),      
    count(*)                -- 전채 행의 수 카운팅
from
    employee;

 

인턴 사원 수 조회

-- 방법 1)
select
    count(*) - count(dept_code) 인턴수
from
    employee;
    
-- 방법 2)
select
    count(*) 인턴수
from
    employee
where
    dept_code is null;
    
-- 방법 3)
select
    count(case when dept_code is null then 1 end) 인턴수,
    sum(case when dept_code is null then 1 end) 인턴수
from
    employee;
  
결과값 모두 "2"

 

 

☞ max(), min()

- 숫자 (가장 큰 수 / 가장 작은 수)

- 문자 (사전등재가 가장 늦은 값 / 사전등재가 가장 빠른 값)

- 날짜 (가장 미래 / 가장 과거)

select
    max(salary), min(salary),
    max(emp_name), min(emp_name),
    max(hire_date), min(hire_date)
from
    employee;