본문 바로가기
SQL

[solvesql - day 16] 스테디셀러 작가 찾기

by 우솨 2025. 1. 11.

https://solvesql.com/problems/find-steadyseller-writers/

 

https://solvesql.com/problems/find-steadyseller-writers/

 

solvesql.com

-- Fiction 장르의 책을 저자별로 연속 출판된 최소 5권 이상의 시리즈를 확인

WITH dist AS (
    -- Fiction 장르의 중복되지 않은 저자와 출판 연도를 가져오는 임시 테이블
    SELECT DISTINCT 
        author,          -- 저자 이름
        year             -- 출판 연도
    FROM 
        books            -- 책 정보 테이블
    WHERE 
        genre = 'Fiction' -- Fiction 장르만 필터링
),

d AS (
    -- 저자별 연도 간의 규칙성을 확인하기 위한 임시 테이블
    SELECT 
        author,          -- 저자 이름
        year,            -- 출판 연도
        year - ROW_NUMBER() OVER (
            PARTITION BY author 
            ORDER BY year
        ) AS dep         -- 연속된 출판 연도의 차이를 기준으로 그룹화할 수 있는 열 (연속될 경우 같은 값이 나옴)
    FROM 
        dist             -- 중복 제거된 Fiction 책 목록
)

SELECT 
    author,             -- 저자 이름
    MAX(year) AS year,  -- 해당 저자의 마지막 출판 연도
    COUNT(*) AS depth   -- 연속 출판된 책의 개수
FROM 
    d                   -- 저자별 연도 차이를 계산한 데이터
GROUP BY 
    author,             -- 저자 이름
    dep                 -- 연속 출판 여부를 결정하는 그룹화 기준
HAVING 
    COUNT(*) >= 5       -- 연속 출판된 책의 개수가 5권 이상인 경우만 필터링