필자는 가끔 분석함수의 기능에 관해 질문을 받는다. 그때마다 대답을 하지 않고 대신에 질문에 부합하는 Analytic SQL을 보여주고 결과를 분석하게 한다. 바로 답을 주게 되면 개발자가 의존적이 되고 분석함수 각각의 기능도 금방 잊어버리기 때문이다.
개발자만 모르는 것이 아니다
얼마 전에 어느 DBA로 부터 요청이 왔다. 자신을 포함한 개발자들이 분석함수를 어려워하니 블로그에 분석함수의 모든 것을 정리한 문서를 올려달라는 것이었다. 물론 오라클 매뉴얼이나 Tomas Kyte의 Expert One on One 등의 책에 이 함수들의 기능이 있지만 페이지 수가 너무 많고 영문이라는 단점이 있다는 것이었다. 이것은 놀라운 일이다. 개발자뿐 아니라 DBA, 심지어 컨설턴트까지 Analytic Function에 관해 필자에게 질문을 던지곤 한다. Oracle8i 부터 기능이 구현되었으니 기간으로 따지자면 10년 이상 존재했던 함수인데 아직까지......
도대체 Analytic Function이 얼마나 어려우면 전문가 까지도 개념이 서지 않는 걸까? 고민 끝에 핵심만 정리한 문서를 올리기로 했다.
핵심은 3가지다
분석함수의 기능이 복잡한 것 같지만 사실은 3가지만 알면 90%를 이해한 것이다.
1) Over 절에서 사용하는 Order by의 기능
2) Over 절에서 사용하는 Partition by의 기능
3) Over 절에서 사용하는 Windowing 기능
이것이 90% 이다. 대부분의 개발자와 DBA들은 1)번과 2)번에 대해서 많이 알고 있지만 이상하게도 3)번에 대해서 개념이 서질 않는다고 하였다. 따라서 아래의 문서를 다운받아서 공부할 때 3)번을 집중적으로 보기 바란다.
그럼 나머지 10%는?
나머지는 아래와 같다. 위의 3가지를 안다면 아래의 함수들은 쉽게 이해할 수 있다. 그저 종류가 많을 뿐이다.
• RANK, DENSE_RANK, and ROW_NUMBER --> 3가지 함수의 차이점
• FIRST/LAST
• NTILE, WIDTH_BUCKET, CUME_DIST and PERCENT_RANK
• Hypothetical Functions
• FIRST_VALUE/LAST_VALUE , LAG/LEAD
• Reporting Functions/RATIO_TO_REPORT
• Handling null
빨강색 부분은 개발자들이 많이 질문하는 것들이다. 참고하기 바란다.
Paper라고 다 같은 것은 아니다
매뉴얼이나 관련서적의 문제점은 페이지 수가 많다는 것이다. 예를 들어 분석함수 부분이 60페이지가 넘어간다면 기능을 익히는데 며칠 혹은 몇 주가 걸릴 수 있다. 필자는 페이지 수가 많은 것을 아주 싫어한다. 아래의 문서는 앞쪽의 목차와 중요성, 그리고 뒤쪽의 마무리 부분을 제외하면 9장(18 페이지)으로 모든 기능과 개념을 설명하였다. 아마 한 두 시간 이내에 다 볼 수 있을 것이다.
테이블 생성 파일 Mastering Oracle Analytic Function ppt 파일
PS
분석함수를 문법이라고 치부해 버리는 사람들이 있다. 그렇지 않다. 많은 경우에 분석함수를 쓰는 것이 SQL 튜닝이 된다. 오죽하면 옵티마이져가 평범한 SQL을 분석함수를 사용하는 것으로 바꾸겠는가?
이제부터 필자에게 분석함수를 질문하는 개발자가 없기를 바란다. ^^
'Oracle > SQL Pattern' 카테고리의 다른 글
검색조건을 동적으로 바꾸어야 할 때 (1) | 2010.12.14 |
---|---|
오라클 Regular Expressions 완전정복 (22) | 2009.10.07 |
간단한 집합개념 Test (7) | 2009.07.06 |
스칼라 서브쿼리에서 Multi Column, Multi Row Return 하기. (7) | 2009.06.29 |
Model 절에 대하여 (10) | 2009.05.28 |