날짜 쿼리 질문입니다. 0 2 438

by 인디비주얼 [SQL Query] query [2020.06.14 19:06:47]


이름 점수 일자
a 95 2020-06-11
b 80 2020-03-20
b 86 2020-03-17
a 91 2020-05-30
c 77 2018-12-26
c 66 2019-01-05

위와 같은 데이터가 있습니다.

1. 이름별 최근 20일 점수 중에서 최근점수/20일 최고점수 >= 1 인것
2.  1의 조건을 충족한 사람의 20일 최고점수, 최근점수 출력

이름 최근점수 최고점수
a 95 95
b 80 86

질문을 제대로 했는지 모르겠네요

답변 부탁드립니다. 감사합니다.

by 마농 [2020.06.15 08:39:17]

제시하신 조건은 표현을 어렵게 해 놨습니다.
최근점수/20일 최고점수 >= 1
(최근점수) 를 (20일 최고점수) 로 나눈 값이 1보다 크거나 같다. 라는 건데
(최근점수) 는 (20일 최고점수) 에 포함되는 값이므로 논리적으로 1보다 클 수는 없고
1이 될 수는 있는데, 1이 된다는 의미는 (최근점수) 가 (20일 최고점수) 와 같다는 거죠.

SELECT 이름
     , MAX(CASE rn WHEN 1 THEN 점수 END) 최근점수
     , MAX(점수) 최고점수
  FROM (SELECT 이름, 점수, 일자
             , ROW_NUMBER() OVER(PARTITION BY 이름 ORDER BY 일자 DESC) rn
          FROM t
        ) a
 WHERE rn <= 20
 GROUP BY 이름
HAVING MAX(CASE rn WHEN 1 THEN 점수 END) = MAX(점수)
--HAVING MAX(CASE rn WHEN 1 THEN 점수 END) / MAX(점수) >= 1
;

 


by 인디비주얼 [2020.06.15 13:55:19]

이해 했습니다. 너무 멍청했네요..
0.9 이상 1 이하로 수정해서 사용하면 될 것 같습니다. 답변 감사합니다. 

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