-
<프로그래머스> 저자 별 카테고리 별 매출액 집계하기코딩테스트/SQL 코딩테스트 2023. 12. 28. 20:29
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/144856
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 문제 요구사항
- 2022년 1월의 도서판매량 데이터를 기준으로
- 저자 별, 카테고리별 매출액(TOTAL_SALES = 판매량 * 판매가)를 구하여
- 저자ID, 저자명, 카테고리, 매출액 리스트를 출력하는 SQL작성
- 결과는 저자ID를 오름차순으로 정렬, 저자가 같다면 카테고리를 내림차순 정렬
테이블이 BOOK, AUTHOR, BOOK_SALES 테이블이 있는데 이 때 BOOK_SALES는 BOOK_ID를 기준으로 집계된 데이터가 아니다. 저자 별, 카테고리 별 매출을 알아내기 위해서는 BOOK_ID를 기준으로 집계를 할 필요가 있는데
2022년 1월에 한하는 조건을 부여해야한다.
2022년 1월 BOOK_SALE에 대해 ID별로 GROUP BY 하여 SALES의 합계를 집계해 총판매량을 구한다 그리고 구한 쿼리 테이블과 BOOK과 AUTHOR 테이블까지 3테이블을 조인한다.
이렇게 조인한 테이블에서 저자별, 카테고리별로 GROUP BY를 통해 집계해서 가격*총 판매량을 곱한 매출액을 구한다.
1) Oracle
SELECT A.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY, SUM(B.PRICE * S.SUM_SALES) FROM AUTHOR A INNER JOIN BOOK B ON A.AUTHOR_ID = B.AUTHOR_ID INNER JOIN (SELECT BOOK_ID, SUM(SALES) AS SUM_SALES FROM BOOK_SALES WHERE TO_CHAR(SALES_DATE, 'YYYY-MM') = '2022-01' GROUP BY BOOK_ID) S ON B.BOOK_ID = S.BOOK_ID GROUP BY A.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY ORDER BY A.AUTHOR_ID, B.CATEGORY DESC;
Oracle GROUP BY절은 집계함수가 없는 칼럼이 모두 GROUP BY 절에 포함되지 않으면 GROUP BY 에러가 발생한다.
따라서 AUTHOR_ID뿐만 아니라 NAME도 GROUP BY에 포함한다. NAME에 중복이 없으므로 똑같이 동작한다.
2) MySQL
SELECT A.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY, SUM((B.PRICE * S.SUM_SALES)) AS SALES FROM AUTHOR A INNER JOIN BOOK B ON A.AUTHOR_ID = B.AUTHOR_ID INNER JOIN (SELECT BOOK_ID, SUM(SALES) AS SUM_SALES FROM BOOK_SALES WHERE EXTRACT(YEAR_MONTH FROM SALES_DATE) = 202201 GROUP BY 1 ORDER BY 1) AS S ON B.BOOK_ID = S.BOOK_ID GROUP BY 1, 3 ORDER BY 1, 3 DESC
MySQL에서 EXTRACT(YEAR_MONTH FROM DATETIME)을 사용하면 년월을 해당 DATETIME에서 추출할 수 있다
Oracle에도 EXTRACT가 있지만 년, 월, 일, 시간 등 따로 하나씩 구할 수 있지, YEAR_MONTH처럼 두 개 이상을 한 번에 추출하는 인수를 제공하지 않았다.
'코딩테스트 > SQL 코딩테스트' 카테고리의 다른 글
<프로그래머스> 입양 시각 구하기(2) (0) 2024.01.09 <프로그래머스> 조건에 부합하는 중고거래 댓글 조회하기 (1) 2024.01.09 <프로그래머스> 주문량이 많은 아이스크림 조회하기 (1) 2023.12.28 <프로그래머스> 조회수가 가장 많은 중고거래 게시판 첨부파일 조회하기 (0) 2023.12.28 <프로그래머스> 우유와 요거트가 담긴 장바구니 (0) 2023.12.28 - 문제 요구사항