728x90
반응형

안녕하세요!

오늘은 프로그래머스 SQL 고득점 Kit 중 GROUP BY 분야의 '저자 별 카테고리 매출액 집계하기' 문제 리뷰를 진행하겠습니다.

 

문제는 아래 링크에서 확인해주시면 됩니다.

https://school.programmers.co.kr/learn/courses/30/lessons/144856

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

  • 문제 설명

 

  • 문제

 

  • 예시

 

  • 문제를 파악하여 쿼리 생각하기

예시에서 볼 수 있듯이, 저희가 문제에서 SELECT 해야하는 부분은 책의

  1. 저자 ID : AUTHOR_ID
    → AUTHOR_ID가 소속되어 있는 BOOK / AUTHOR 두 개의 테이블 중에서 아무 테이블에서 가져오시면 됩니다.
  2. 저자 이름 : AUTHOR_NAME
  3. 장르 : CATEGORY
  4. 총 매출 : SUM(PRICE*SALES) TOTAL_SALES
    → 각 책에 대한 금액과 판매 권수만 나와있기 때문에 금액*판매 권수를 하면 각 책의 매출 금액을 알 수 있습니다.
    → 저자별, 카테고리 별 총 매출액을 알고 싶기 때문에 각 책의 매출 금액을 합쳐야 최종 매출액을 구할 수 있습니다.
    → TOTAL_SALES는 총 매출액의 컬럼을 별칭으로 지정한 것 입니다.

총 4개인 것을 확인할 수 있습니다.

728x90

다음으로 테이블을 JOIN 해야하는 부분은

  1. BOOK 테이블과 AUTHOR 테이블을 AUTHOR_ID 기준으로 동시 만족 : JOIN AUTHOR b ON a. AUTHOR_ID=b. AUTHOR_ID
    → 여기서 a는 BOOK 테이블의 별칭이라고 생각하시면 됩니다.
  2. BOOK 테이블과 BOOK_SALES 테이블을 BOOK_ID를 기준으로 동시 만족 : JOIN BOOK_SALSE c ON a.BOOK_ID=c.BOOK_ID

위와 같은 것을 확인할 수 있습니다.

 

다음으로 저희가 WHERE 조건으로 확인해야 하는 부분은

  1. 2022년 1월 기준 : SALES_DATE LIKE '2022-01%'
    → 날짜가 '연도-월-일'의 형태로 들어오고 있고, 연도와 월만 생각하면 되기 때문에 일에 어떤 값이 와도 상관없다는 뜻으로 %를 붙여주시면 됩니다.
    → 만약 1월을 기준으로 한다면 SALES_DATE LIKE '%01%' 조건이 됩니다.

총 1개 인 것을 확인할 수 있습니다.

 

다음으로 저희가 GROUP BY 해야하는 부부은

  1. 저자 별 카테고리 별 : AUTHOR_ID, AUTHOR_NAME, CATEGORY, 
    → AUTHOR_NAME 는 AUTHOR_ID에 귀속되어져 있기 때문에 함께 GROUP BY 해주셔도 되고, 안해주셔도 됩니다만, 집계 함수를 제외한 나머지 컬럼은 최대한 모두 그룹화해주시는 것이 좋습니다.
    → AUTHOR_ID가 아닌 AUTHOR_NAME으로 그룹화를 하게되면, 동명이인 즉 이름은 동일하지만 다른 사람이 동일한 사람으로 집계가 되지 때문에 반드시 AUTHOR_ID가 기준이 되어야 합니다.

위와 같은 것을 확인할 수 있습니다.

 

마지막으로 저희가 문제에서 확인해야 하는 부분은

  1. 저자 ID 오름차순, 카테고리 내림차순 정렬 : ORDER BY AUTHOR_ID, CATEGORY DESC

총 1개인 것을 확인할 수 있습니다.

 

  • 쿼리 완성하기

이제 위에서 생각한 쿼리를 SQL 실행순서에 맞게 배치해주시면 됩니다.

그렇게 완성된 쿼리는 아래와 같습니다.

SELECT  b.AUTHOR_ID,
        AUTHOR_NAME,
        CATEGORY,
        SUM(PRICE*SALES) AS TOTAL_SALES
FROM    BOOK a
JOIN    AUTHOR b ON b.AUTHOR_ID=a.AUTHOR_ID
JOIN    BOOK_SALES c ON a.BOOK_ID=c.BOOK_ID
WHERE   SALES_DATE LIKE '2022-01%'
-- 숫자에 직접 컬럼 이름을 넣어주셔도 됩니다.
-- 각 숫자는 컬럼의 순서를 의미합니다.
GROUP BY 1,2,3
ORDER BY 1, 3 DESC

 

궁금한 부분이 있으신 분들은 댓글로 남겨주시면, 답변 드리도록 하겠습니다.

 

★읽어주셔서 감사합니다★

728x90
반응형

+ Recent posts