Chanho_Park

[ORACLE] DECODE, ROLLUP,GROUPING 함수 본문

Spring/Oracle

[ORACLE] DECODE, ROLLUP,GROUPING 함수

Chanho_Park 2023. 5. 16. 10:24
728x90
SELECT * FROM employees;
 

 

 rollup
     그룹별 산출한 결과값의 소계/누계를 구하는 함수
      - rollup은 GROUP BY에서 사용하며 여러 개 사용이 가능하다.
그룹별 산출한 결과값의 소계/누계를 구하는 함수

      - rollup은 GROUP BY에서 사용하며 여러 개 사용이 가능하다.

 

SELECT depart_no, commision, count(*) FROM employees GROUP BY ROLLUP(depart_no, commision);
 

 grouping 함수
    실제 데이터와 집계 데이터를 구분하는 함수
      - 0: 실제 데이터
      - 1: 집계 데이터

SELECT GROUPING(depart_no), GROUPING(commision), count(*) FROM employees GROUP BY ROLLUP(depart_no, commision);
 
 

 decode()
    자바에서 switch와 유사한 선택함수
    decode [검사할 조건계산식, 값1, 처리할식1, 값2, 처리할식2, ..., (default값)]
      - 처리식이 두 개일 경우, 1 생략가능

SELECT DECODE(GROUPING(depart_no), 0,depart_no, 1,' ') 부서번호, DECODE(GROUPING(commision), 0,TO_CHAR(commision), ' ') 커미션, -- 1 생략 가능 count(*) FROM employees GROUP BY ROLLUP(depart_no, commision);
 

Ex. 학번이 A112113 인 김고운 학생의 년도, 학기 별 평점과 년도 별 누적 평점 , 총 평점을 구하는 SQL 문을 작성하시오.  (단, 평점은 소수점 1 자리까지만 반올림하여 표시한다.)

-- 'A112113' 학생 평점 조회

SELECT * FROM tb_grade WHERE student_no = 'A112113';
SELECT term_no, AVG(point) FROM tb_grade WHERE student_no = 'A112113' GROUP BY term_no ORDER BY 1;


-- 년도, 학기 그룹을 재지정

SELECT (SUBSTR(term_no,1,4)) 년도, (SUBSTR(term_no,5,2)) 학기, ROUND(AVG(point),1) 평균 FROM tb_grade WHERE student_no = 'A112113' GROUP BY ROLLUP(SUBSTR(term_no,1,4), SUBSTR(term_no,5,2));


-- DECODE를 이용해서 null 값 수정

SELECT DECODE(GROUPING(SUBSTR(term_no,1,4)), 0,SUBSTR(term_no,1,4), 1,' ') 년도, DECODE(GROUPING(SUBSTR(term_no,5,2)), 0,SUBSTR(term_no,5,2), 1,' ') 학기, ROUND(AVG(point),1) 평균 FROM tb_grade WHERE student_no = 'A112113' GROUP BY ROLLUP(SUBSTR(term_no,1,4), SUBSTR(term_no,5,2));
728x90

'Spring > Oracle' 카테고리의 다른 글

sql 문  (0) 2023.02.06
Oracle Cloud 가입(오라클 클라우드)  (0) 2022.10.28