lag
이 함수는 게시판 짤 때 활용할 수 있는데 다음이 예시다.
이전글번호 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 를 가져옵니다.)
group by 함수를 사용하면 묶은 컬럼을 활용해 sum이나 avg 등의 함수를 사용할 수 있다. 하지만 단순 group by는 묶은 컬럼의 각 행의 특징은 알 수 있지만 묶은 컬럼의 전체 값을 알 수 없다.
예)
부서 직무 연봉평균
마케팅부 차장 1
대리 2
마케팅부전체 3
부서전체 직무전체
단순히 부서와 직무만 묶는다면 부서 전체의 연봉평균과
부서전체 그리고 직무 전체의 연봉 평균을 알 수 없지만
select 부서, 직무, AVG(연봉)
from tbl
group by rollup(부서, 직무);
이런 방식으로 전체의 값을 알 수 있다.
즉 위에서 마케팅부 차장, 마케팅부 대리 처럼 각 부서의 직무를 하나씩 출력해서 보여줄 것이다.
주민등록번호
---------------------------
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 은 현재년도를 더해준 것이다.