[Oracle] 오라클 SUM(DECODE) 사용법

오라클 SQL에서 SUM(DECODE)는 특정 조건의 데이터를 합산해서 가로로 표시할 때 사용하는 방법이다. DECODE 함수가 오라클에서만 사용가능하기 때문에 표준 SQL인 SUM(CASE WHEN) 구문을 권장하기도 하지만, 오라클에서 사용할 때는 SUM(DECODE) 구문이 조금 더 직관적이고, 쿼리문이 조금 더 간결하기 때문에 실무에서 많이 사용하는 편이다. 두 가지 방법 모두 동일한 결과를 얻을 수 있기 때문에 취향에 따라서 사용하면 된다.

 

목차

 

기본 사용법

SELECT SUM(DECODE(job, 'MANAGER', sal)) AS manager_sal
  FROM emp

 

 

SUM(DECODE) 구문은 특정 조건일 때 데이터를 합산하기 위해 사용하는 방법이다. 요즘은 표준 SQL인 SUM(CASE WHEN)을 많이 사용하지만, 오라클에서는 SUM(DECODE) 구문이 조금 더 직관적인 면이 있기 때문에 많이 사용하는 편이다. 그러나 조금 복잡한 조건을 부여할 때는 SUM(CASE WHEN)을 사용하는 것이 효율적일 것이다.

 

세로의 합산 값을 가로로 표시하기

SELECT SUM(DECODE(job, 'MANAGER',  sal)) AS manager_sal
     , SUM(DECODE(job, 'SALESMAN', sal)) AS salesman_sal
     , SUM(DECODE(job, 'CLERK',    sal)) AS clerk_sal
  FROM emp

 

 

위의 예제는 SUM(DECODE) 구문의 대표적인 예제이다.

GROUP BY 절을 사용하여 집계를 하면 결과가 행으로 표시되는데, SUM(DECODE) 구문을 사용하면 세로의 합산 결과를 가로로 표시할 수 있다.

 

특정 조건의 건수 합산하기

SELECT SUM(DECODE(job, 'MANAGER', 1))   AS manager_cnt
     , SUM(DECODE(job, 'SALESMAN', 1))  AS salesman_cnt
     , SUM(DECODE(job, 'CLERK', 1))     AS clerk_cnt
     , SUM(DECODE(job, 'PROGRAMER', 1)) AS programer_cnt
  FROM emp

 

 

특정 조건 데이터의 건수를 집계할 때도 사용할 수 있다. 위의 경우는 SUM 함수 대신 COUNT 함수를 사용할 수도 있지만, 의미상 SUM 함수를 사용하는 것이 조금 더 직관적일 수 있다.

 

SELECT SUM(DECODE(job, 'MANAGER',   1, 0)) AS manager_cnt
     , SUM(DECODE(job, 'SALESMAN',  1, 0)) AS salesman_cnt
     , SUM(DECODE(job, 'CLERK',     1, 0)) AS clerk_cnt
     , SUM(DECODE(job, 'PROGRAMER', 1, 0)) AS programer_cnt
  FROM emp

 

 

DECODE 함수의 ELSE 영역에서 0을 반환하면, 조건의 데이터가 없어도 0을 표시할 수 있다.

 

연월별 집계표 만들기 (고급예제)

SELECT TO_CHAR(hiredate, 'YYYY')                        AS "입사년도"
     , SUM(DECODE(TO_CHAR(hiredate, 'MM'), '01', 1, 0)) AS "01월"
     , SUM(DECODE(TO_CHAR(hiredate, 'MM'), '02', 1, 0)) AS "02월"
     , SUM(DECODE(TO_CHAR(hiredate, 'MM'), '03', 1, 0)) AS "03월"
     , SUM(DECODE(TO_CHAR(hiredate, 'MM'), '04', 1, 0)) AS "04월"
     , SUM(DECODE(TO_CHAR(hiredate, 'MM'), '05', 1, 0)) AS "05월"
     , SUM(DECODE(TO_CHAR(hiredate, 'MM'), '06', 1, 0)) AS "06월"
     , SUM(DECODE(TO_CHAR(hiredate, 'MM'), '07', 1, 0)) AS "07월"
     , SUM(DECODE(TO_CHAR(hiredate, 'MM'), '08', 1, 0)) AS "08월"
     , SUM(DECODE(TO_CHAR(hiredate, 'MM'), '09', 1, 0)) AS "09월"
     , SUM(DECODE(TO_CHAR(hiredate, 'MM'), '10', 1, 0)) AS "10월"
     , SUM(DECODE(TO_CHAR(hiredate, 'MM'), '11', 1, 0)) AS "11월"
     , SUM(DECODE(TO_CHAR(hiredate, 'MM'), '12', 1, 0)) AS "12월"
  FROM emp
 GROUP BY TO_CHAR(hiredate, 'YYYY')
 ORDER BY 1

 

 

위의 예제는 연도별 + 월별 입사건수를 집계하는 쿼리문이다. SUM(DECODE) 구문은 월별 데이터를 가로로 집계할 때 많이 사용한다. SUM(DECODE) 구문을 사용하지 않는다면, 가로로 표시하는 로직이 애플리케이션단에서 처리해야 하기 때문에 프로그램이 조금 복잡해질 수 있다.

 

위의 월별 집계는 실무에서 아주 많이 사용하는 쿼리문이기 때문에 알아두면 아주 유용하게 사용할 수 있다.

 

SUM(DECODE) 구문이 이해가 아직 안 된다면, 아래의 포스팅을 참고하면 도움이 될 것이다.

예제쿼리(테이블포함).txt
0.00MB

 

[Oracle] 오라클 SUM(CASE WHEN) 사용법

오라클 SQL에서 합산 값을 가로로 표시할 때 SUM(CASE WHEN) 구문을 사용할 수 있다. SUM 함수 내부에서 CASE 연산자로 조건을 부여하여 해당 조건에 맞는 값만 합산을 하는 방식이다. SUM(CASE WHEN)은 SUM(DE

gent.tistory.com

 

[Oracle] 오라클 월별 합계 구하기 (월별 통계)

오라클 쿼리에서 월별 합계(월별 통계)를 구하기 위해서는 날짜 칼럼을 TO_CHAR 함수를 사용하여 년월까지만 잘라서 집계를 하면 쉽게 구할 수 있다. 월별 가로 합계를 구하기 위해서는 DECODE 함수

gent.tistory.com

 

[Oracle] 행을 열로 바꾸는 3가지 방법 (세로를 가로로)

오라클에서 행을 열로 바꾸기 위해서는 다양한 방법이 있다. 그룹별로 집계된 데이터의 행을 열로 바꾸기 위해서는 PIVOT, DECODE 또는 CASE를 사용하며, 여러 행의 문자열을 합쳐서 하나의 열로 바

gent.tistory.com

 

[Oracle] 오라클 누적 합계 구하기 (SUM OVER)

오라클에서 누적 합계를 구하기 위해서는 SUM 함수와 OVER 절을 사용하면 된다. OVER 절을 사용하면 GROUP BY 절을 사용하지 않고도 SELECT 절에서 단독으로 합계를 구할 수 있다. OVER 절 내부의 ORDER BY

gent.tistory.com

 

[Oracle] 오라클 DECODE 함수 사용법

DECODE 함수는 오라클 쿼리에서 가장 많이 사용하는 함수 중 하나이다. 표준 SQL 함수가 아니라서 사용을 꺼려하기도 하지만 잘 사용하면 아주 편하기 때문에 유용하다. 최근에는 CASE WHEN 구문 사용

gent.tistory.com

 

 

댓글

Designed by JB FACTORY