가끔 sql을 통해 데이터를 뽑아내고자 할 때 어떤 기준에 의해 걸러진 가장 최신 데이터를 처리해야할 때가 있습니다.
예를 들면 기숙사 입사 신청자를 뽑고자 할 때 신청 학생의 성적중에서 가장 최근 것만 골라내고자 하는 경우가 있을 수 있습니다.
해당 학생이 전년도 혹은 전학기에 수강한 성적이 있으면 좋지만 그렇지 않고 휴학했다가 복학하는 경우에는 그냥 전년도 성적을 뽑으면 나오지 않기 때문에 해당 학생의 휴학 하기 전 마지막 성적 (이게 최근 성적이 되죠..)을 알아야 합니다..
이럴 때 RANK 기능을 사용하시면 됩니다. (오라클 DB를 기준으로 합니다만 아마 대부분 DB에서 비슷할 것으로 여겨집니다)
사용예제)
SELECT HB, YY, HK, PJ_PG, PJ_PGPK, RK
FROM (SELECT HB, YY, HK, PJ_PG, PJ_PGPK, RANK() OVER (PARTITION BY HB ORDER BY YY DESC,
HK DESC) AS RK FROM SKSJ_GYE )
WHERE RK=1;
- 구문의 의미 : 학생들이 각 학기마다 취득한 학점 합계를 최근 일순위만 뽑아서 학번순으로 표시해 줍니다.
205---. 2006, 1, 4.5, A+, 1
206---. 2007, 2, 4.02, A0, 1
207---. 2008, 2, 4.15, A0, 1
208---. 2009, 2, 3.5, B+, 1
209---. 2009, 1, 3.68, B+, 1
- FROM 절에 핵심이 되는 SQL문이 들어갑니다.
- 이 SQL 문을 FROM 절에 넣어서 다시 돌린 것은 랭킹이 1인 즉, 가장 최근 데이터만 뽑기 위해서입니다.
- FROM 절에 들어간 구문만 따로 실행하면 그룹핑한 값에 대해 여러개의 값이 있을 경우 최근 순서대로
랭킹이 매겨져서 표시됩니다.
208---. 2009, 1, 4.5, A+, 1
208---. 2008, 2, 4.02, A0, 2
208---. 2008, 1, 4.15, A0, 3
209---. 2009, 2, 3.5, B+, 1
209---. 2009, 1, 3.68, B+, 2
[ RANK() OVER (PARTITION BY HB ORDER BY YY DESC, HK DESC) AS RK ] 분석
- PARTITION BY HB : HB 라는 컬럼으로 데이터들을 Grouping 하겠다는 것입니다.
그룹핑하기 원하는 컬럼명을 여기에 적으시면 되겠습니다.
- ORDER BY YY DESC, HK DESC : YY 컬럼을 최근 순으로 정렬하고, 다음에 HK 컬럼을 다시 정렬합니다.
정렬하기 원하는 순서를 여기에서 정하시면 됩니다.
'프로그래밍Tips' 카테고리의 다른 글
Unix 명령어 관련 참고사항 (0) | 2010.03.02 |
---|---|
특정 div 프린트 하기 ...from Wilson's stroy (0) | 2009.11.20 |
[JavaScript] ESC와 BackSpace 막기 (0) | 2009.09.10 |