라일락 꽃이 피는 날

[Oracle] 복수행 함수 - 집계함수 본문

프로그래밍/Oracle

[Oracle] 복수행 함수 - 집계함수

eunki 2022. 5. 29. 18:22
728x90

집계 함수

  • max : 최댓값 출력
  • min : 최솟값 출력
  • avg : 평균 출력
  • sum : 총 합계 출력
  • count : 갯수 출력

 

 

 

예제 1. 사원 테이블에서 최대 월급을 출력

select max(sal)
    from emp;

 

 

 

예제 2. 사원 테이블에서 최대 월급과 직업이 같이 나오게 출력

select job, max(sal)
    from emp
    where job = 'SALESMAN';

이렇게 작성하면 job 은 여러 개가 나오려고 하고, max(sal) 은 하나가 나오려고 하기 때문에 에러가 난다.

그래서 다음과 같이 group by 를 사용해야 한다.

 

 

select job, max(sal)
    from emp
    where job = 'SALESMAN'
    group by job;

group by 절은 grouping 을 해주는 역할을 한다.

코딩 순서 : select → from → where → group by

실행 순서 : from → where → group by → select

 

 

 

예제 3. 사원 테이블에서 최소 월급을 출력

select min(sal)
    from emp;

 

 

 

예제 4. 사원 테이블에서 커미션의 평균 값을 출력

select avg(comm)
    from emp;

550은 커미션을 다 더해서 14로 나눈 값이 아니라 4로 나눈 값이다.

group 함수는 null 값을 무시하기 때문에 전체 사원 수 14가 아닌 4로 나눈다.

 

 

 

예제 5. 사원 테이블의 월급의 토탈 값을 출력

select sum(sal)
    from emp;

 

 

 

예제 6. 직업, 직업 별 토탈 월급을 출력하는데, 월급이 5000 이상인 것만 출력

select job, sum(sal)
    from emp
    where sum(sal) >= 5000
    group by job;

where 절에는 그룹 함수로 검색 조건을 줄 수 없다.

그룹 함수로 검색 조건을 주려면 where 절 말고 having 절을 사용해야 한다.

 

 

select job, sum(sal)
    from emp
    group by job
    having sum(sal) >= 5000;

having 절은 항상 group by 절 다음에 위치한다.

having 절에는 group 함수에 대한 검색 조건만 사용한다.

다른 검색 조건을 줘도 에러는 나지 않지만 검색 성능이 느려진다.

 

 

 

예제 7. 사원 테이블의 전체 건수를 출력

select count(*)
    from emp;

 

 

 

예제 8. 보이스 피싱 범인들이 사용하는 단어인 “본인”이 몇 번 나오는지 출력

select sum(regexp_count(voice_text, '본인'))
    from voice;

regexp_count 함수는 기존 count 함수로는 카운트 할 수 없는 결과를 볼 때 사용한다.

위와 같이 text 속에서 단어의 개수를 count 할 때 유용한 함수다.

728x90