오라클 년도별 구분 조회쿼리 질문 드려요 0 2 854

by 문진균 [SQL Query] 년도 구분 [2020.03.16 15:22:49]


안녕하세요?

아래 데이터에 대한 조회 쿼리 작성중인데 질문 드립니다.

1. 테이블 명 및 컬럼구조

테이블명 : EXAM

STUDENT YEAR_YM SCORE
홍길동    2015       90
홍길동    2016       85
홍길동    2017       87
홍길동    2018       96
홍길동    2019       91

2. 조회하고 싶은 양식(전년도, 전년도 점수, 차년도, 차년도 점수)

STUDENT BF_YEAR_YM BF_SCORE  AF_YEAR_YM AF_SCORE
홍길동    2015           90           2016           85
홍길동    2016           85           2017           87
홍길동    2017           87           2018           96
홍길동    2018           96           2019           91
홍길동    2019           91            

3. 작성한 쿼리
SELECT  C.STUDENT
        ,  C.BF_YEAR_YM
        ,  C.BF_SCORE
        ,  D.AF_YEAR_YM
        ,  D.AF_SCORE

  FROM ( SELECT A.STUDENT
                   ,  A.YEAR_YM   BF_YEAR_YM
                   ,  A.SCORE      BF_SCORE
                   ,  ROW_NUMBER() OVER(PARTITION BY A.STUDENT ORDER BY A.YEAR_YM) RN
              FROM EXAM A
          ) C
        , ( SELECT B.STUDENT
                   ,  B.YEAR_YM    AF_YEAR_YM
                   ,  B.SCORE        AF_SCORE
                   ,  ROW_NUMBER() OVER(PARTITION BY B.STUDENT ORDER BY B.YEAR_YM) - 1 RN
              FROM EXAM B
          ) D
 WHERE C.STUDENT = D.STUDENT
     AND C.RN = D.RN


row_number로 조인하도록 3번 쿼리를 작성해 봤고 원하는 양식으로 결과가 나오긴 하지만

더 간단하거나 효율적인 작성 방법이 있을지 가르침 부탁드립니다. ㅜ,.ㅠ

감사합니다.

by 마농 [2020.03.16 16:17:39]
SELECT student
     , year_ym
     , score
     , LEAD(score) OVER(PARTITION BY student ORDER BY year_ym) af_score
--   , LAG (score) OVER(PARTITION BY student ORDER BY year_ym) bf_score
  FROM exam
;

 


by 문진균 [2020.03.16 16:36:24]

마농님 감사합니다!!! 제가 원하던 기능이었어요. ㅜ,.ㅠ 감사드립니다!!!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입