250x250
Notice
Recent Posts
Recent Comments
Link
Chanho_Park
[ORACLE] DECODE, ROLLUP,GROUPING 함수 본문
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 |