Amazon Top 50 Bestselling Books 데이터베이스에는 아마존 쇼핑몰에서 2009년부터 2019년까지 매년 집계한 판매량 상위 50위의 책 정보를 담고 있습니다. 서로 다른 작품이더라도 5년 이상 연속으로 베스트셀러 목록에 올라간 작가를 모아 스테디셀러 소설 작가 특별전을 열고자 합니다.
books 테이블의 데이터를 사용해 5년 이상 연속으로 베스트셀러 작품 목록에 이름을 올린 소설 작가와 연도 정보를 출력하는 쿼리를 작성해주세요. 쿼리 결과는 아래 결과를 포함해야 합니다.
author - 작가 이름
year - 연속 베스트셀러 기간 중 가장 최근 연도
depth - 연속 베스트셀러 년수
with cte_1 as (select *
from(
-- step 2
select author,year,lag(year,4) over (partition by author order by year) as lag_5
from
-- step 1
(select author,year from books group by author,year having genre = 'Fiction' order by 1,2) t
) t2
-- step 3
where lag_5 is not null
)
select author,max(year) as year,count(*) + 4 as depth
from cte_1
where (year-lag_5)=4
group by author;
lag 함수를 이용해서 풀어보았다.
step1.먼저 author, year 별로 순서대로 정렬
step2.lag 함수 이용해서 5년 전 연도 불러오기
step3.이때 5년 '연속'으로 베스트셀러여야하기 때문에 해당 lag 값이랑 year 차이 값이 4인지 꼭 -! 확인하기
잠시만!
lag 함수 : 이전 행 가져오는 윈도우 함수
lead 함수 : 다음 행 가져오는 윈도우 함수
장르 구분 꼭 지어서 where genre = 'Fiction'으로 처리할 것..
계속 17개 행으로 떠서 당황했는데, 다른 분께서 알려주신 덕분에 장르 조건이 있었다는걸 확인할 수 있었다.
꼭 주의해서 풀길!
ex) Dr.Seuss
2012년부터 2019년까지 베스트셀러 연속으로 선정 : 총 8년
author별로 year카운팅 : 4
--> 기존 author별로 카운팅한 값에 4을 꼭 더해야한다.