티스토리 뷰

SQL

[SQL] 6. 그룹함수(복수행함수)

superkong1 2018. 1. 23. 15:26
반응형

6. 그룹함수(복수행함수)

사실 데이터를 다루는 직업의 기본은 평균, 최대, 최소값을 구하는 것이라고 생각한다.
세상 사람들이 가장 관심 가지는 것도 위 세가지며,
데이터 분석가로서 ORACLE SQL을 사용할때에도 기본적으로
능숙하게 구할줄 알아야하는 값이다. (개인적인 생각일뿐이다.)

이제 그룹함수를 배워보자.
그룹함수에는 max, min, avg, sum, count 등이 있으며
함수의 기능은 이름에서 쉽게 유추해볼 수 있다.

또한, 그룹함수의 특징으로는 크게 2가지가 있다.
1.수 일치가 필요
2.NULL 값을 무시(제외)하고 함수 실행

하나씩 차례대로 살펴보도록 하자.

max, min

max와 min함수는 이름 그대로 최대, 최소값을 출력하는 함수이다.

예) 직업이 SALESMAN인 사원들 중에서 가장 많은 월급을 출력하시오!
select max(sal)
from emp
where job = 'SALESMAN';

그룹함수의 특징 중 하나는 사용 시 모든 출력값과 수가 일치하지 않으면 오류가 난다는 점이다. 쉽게 설명하면
select ename, max(sal) from emp;는 에러가 발생한다.
ename은 여러 명이 있는 다수의 데이터이고
max(sal)은 월급 중 가장 큰 한 가지를 뽑은 단일 데이터이기 때문이다.


<수 불일치 에러 발생>

group by 문과 함께 사용시에는 위와 같은 문제를 해결할 수 있다.
→ 각 이름을 하나의 그룹으로 인식하는 것


<수 불일치 에러 해결>

avg

avg는 average와 동일하게 평균값을 구하는 함수이다.

예제) 전 직원의 커미션의 평균을 구하시오!
기본 데이터를 먼저 확인해보자

→ NULL 값이 많은 상태

select avg(comm) from emp;

여기서 결과로 출력된 550은 잘못된 값이다.
14명의 총 커머션 합이 2200이므로 2200 ÷ 14 = 157.1429가 나와야 하는데
값이 존재하는 1400, 300, 0, 500의 평균만을 구한 것이다. (4로 나눈것)
여기에서 우리는 그룹함수의 또 다른 특징으로
NULL 값을 무시(제외)하고 결과를 도출한다는 것을 알 수 있다.

위 예제를 제대로 실행하려면 comm 컬럼의 모든 null 값을 0으로 변환한 후,
avg(comm) 함수를 실행하면 된다.

select avg(nvl(comm, 0))
from emp;

sum

sum 함수는 말 그대로 합을 구해주는 함수이다.

예제) 부서번호, 부서번호별 토탈 월급을 출력하시오!
select deptno, sum(sal)
from emp
group by deptno;

어떤 그룹'별' 데이터를 구하고 싶다면 group by 문을 사용하면 된다.

  • 위 결과 값의 행과 열을 바꿔서 출력하려면?
    → 이전에 배웠던 decode 함수와 sum 함수를 함께 사용하면 된다.

select sum(decode(deptno,10,sal)) as "10",
sum(decode(deptno,20,sal)) as "20", sum(decode(deptno,30,sal)) as "30"
from emp;

숫자를 컬럼이름으로 지정할 때에는 꼭 쌍따옴표(" ")를 붙여야 함에 유의! 그냥 따옴표(' ')는 오류가 발생한다.

count

count 함수는 건수를 세는 함수이다. 처음부터 사용했던
select * from emp; 에서 '*'는 count함수와 함께 많이 쓰인다.

예제) 직업, 직업별 인원수를 출력하시오!
select job, count(*)
from emp
group by job;

count(*)가 group by문 이후 select문에서 실행되므로,
직업별로 나눈 데이터를 세는 것 = 각 직업별 인원수로 적용할 수 있다.

물론 null값을 제외하기 때문에 count(컬럼) 실행 시 null값을 제외한
컬럼 내 데이터 건수를 알 수 있다.

애초에 group by와 사용하면 NULL 값도 알아서 구분해주는 똑똑함을 보여준다.

=================이 글은 Markdown을 활용해 작성하였습니다=================

반응형

'SQL' 카테고리의 다른 글

[SQL] 8. Join  (0) 2018.01.30
[SQL] 7. 데이터 분석함수  (0) 2018.01.26
[SQL] 5. 일반함수  (0) 2018.01.22
[SQL] 4.날짜함수 & 변환함수  (0) 2018.01.21
[SQL] 3. 문자함수 & 숫자함수  (0) 2018.01.20
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함