16. 스테디셀러 작가 찾기
2024-12-19
문제
https://solvesql.com/problems/find-steadyseller-writers/
풀이
조건을 잘 읽자 ^!^
이 문제의 키는 무엇이었나...연속성 구하기...? 아니... 바로 장르 설정하기다...............
온갖 쿼리로 비틀어도 통과를 못하길래 왜지...왜지....하면서 csv까지 받아서 하나하나 검증하다가 깨우침. 조건 중 하나가 "소설 작가" 였다는걸............
소설 작가랑은 별개로 여기서 키는 연속성 구하기가 맞았다. 작가들을 연도별로 쭉 나래비를 세워서 이전 행의 연도와 현재 행의 연도를 비교하면 뚝딱 가능!
마지막으로 제출한 쿼리에서는 year = prev + 1 or prev is null
이라고 WHERE
절 안에 넣었는데, LAG()
를 사용하는 부분에서 차라리
SELECT ...
CASE WHEN LAG(year)OVER(PARTITION BY author ORDER BY year) IS NULL THEN year ELSE LAG(year)OVER(PARTITION BY author ORDER BY year) END as prev
이런 식으로 미리 널체크를 해서 prev
의 기본값을 당해년도로 입력 했어도 됐지 싶음. 그치만 단순 case문도 아니고 안에 함수까지 들어간 case문은 필연적으로 가독성이 쓰레기가 된다고 생각하기 때문에 밖으로 빼서 사용했다네요 저는 ,,
+) 다시 생각해보니 COALESCE
쓰면 되잖아? 역시 최선의 답은 없다 ... 봐도 봐도 대안이 계속 나오네 ...
최종 답안
SELECT
author
, MAX(year) year
, COUNT(*) depth
FROM (
SELECT
author,
year,
LAG(year)OVER(PARTITION BY author ORDER BY year) prev
FROM books
WHERE genre = 'Fiction'
) fictions f
WHERE (year = prev + 1 or prev is null)
GROUP BY author
HAVING COUNT(*) >= 5