오라클 함수 정리(2)

Jay_u·2023년 3월 26일
0

Oracle

목록 보기
2/3

목차

lag


lag : 이전 행의 값을 반환

lead : 다음 행의 값을 반환

이 함수는 게시판 짤 때 활용할 수 있는데 다음이 예시다.

이전글번호            boardno              다음글번호
                       1                     2
    1                  2                     3
    2                  3                     4
    3                  4                     5

select lag(boardno, 1) over(order by boardno asc) as 이전글번호,
        lead(boardno, 1) over(order by boardno asc) as 다음글번호

boardno는 게시판 번호를 의미하며, 이를 오름차순으로 정렬했을 때 lag는 1칸 앞선 행의 boardno 를 가져옵니다.)
boardno는 게시판 번호를 의미하며, 이를 오름차순으로 정렬했을 때 lead는 1칸 뒤의 행의 boardno 를 가져옵니다.)

rollup(a, b) : 요약해주는 함수 1

rollup(a,b)는 (a,b) , (a), (b) (전체) 이렇게 각각 묶어서 출력한다.

group by 함수를 사용하면 묶은 컬럼을 활용해 sum이나 avg 등의 함수를 사용할 수 있다. 하지만 단순 group by는 묶은 컬럼의 각 행의 특징은 알 수 있지만 묶은 컬럼의 전체 값을 알 수 없다.

예)

부서      직무       연봉평균

마케팅부   차장          1
          대리          2
       마케팅부전체      3 
       
 부서전체  직무전체          

단순히 부서와 직무만 묶는다면 부서 전체의 연봉평균과
부서전체 그리고 직무 전체의 연봉 평균을 알 수 없지만

select 부서, 직무, AVG(연봉)
from tbl
group by rollup(부서, 직무);

이런 방식으로 전체의 값을 알 수 있다.

grouping set(a, b) : 요약해주는 함수 1

grouping set(a, b)는 (a,b)만 묶어서 보여준다.

즉 위에서 마케팅부 차장, 마케팅부 대리 처럼 각 부서의 직무를 하나씩 출력해서 보여줄 것이다.

나이 뽑아내는 법

주민등록번호
---------------------------
9903251111111
0212012111111
9911291111111
0005093333333
0055554444444

extract(year from sysdate) - ( to_number(substar(주민등록번호, 1, 2) + case when substar(주민등록번호, 7, 1) in('1', '2') then 1900 else 2000 end) + 1

설명) 현재 년도를 가져와서 이제 주민등록상 출생년도를 빼줄 것이다.
주민등록번호의 앞에서부터 2자리는 끝년도이고 이제 7번째 자리가 1, 2 라면 1900년을 더해서 빼준다. (주민등록번호 설명 참고)
+1 은 현재년도를 더해준 것이다.

profile
정확한 정보를 전달할려고 노력합니다.

0개의 댓글