문제 설명
다음은 어느 한 서점에서 판매중인 도서들의 도서 정보(BOOK), 판매 정보(BOOK_SALES) 테이블입니다.
BOOK 테이블은 각 도서의 정보를 담은 테이블로 아래와 같은 구조로 되어있습니다.
Column name | Type | Nullable | Description |
BOOK_ID | INTEGER | FALSE | 도서 ID |
CATEGORY | VARCHAR(N) | FALSE | 카테고리 (경제, 인문, 소설, 생활, 기술) |
AUTHOR_ID | INT | FALSE | 저자 ID |
PRICE | INT | FALSE | 판매가 (원) |
PUBLISHED_DATE | DATE | FALSE | 출판일 |
BOOK_SALES 테이블은 각 도서의 날짜 별 판매량 정보를 담은 테이블로 아래와 같은 구조로 되어있습니다.
Column name | Type | Nullable | Description |
BOOK_ID | INT | FALSE | 도서ID |
SALES_DATE | DATE | FALSE | 판매일 |
SALES | INT | FALSE | 판매량 |
문제
2022년 1월의 카테고리 별 도서 판매량을 합산하고, 카테고리(CATEGORY), 총 판매량(TOTAL_SALES) 리스트를 출력하는 SQL문을 작성해주세요.
결과는 카테고리명을 기준으로 오름차순 정렬해주세요.
문제해설
문제를 보며 차근차근 단서를 찾아보자
먼저 두 개의 테이블이 주어졌다는 점에서, 본 문제는 JOIN을 사용해야 된다는 가능성을 염두하자.
이어서, 본 문제는 DATE 타입 컬럼이 두 개나 존재한다. 추가로 문제에서 2022년 1월의 판매량 합산을 요구한다.
따라서 본 문제는 DATE 컬럼의 파싱을 해야 될 것이다.
또한, 문제에서 카테고리별 총 판매량을 구해달라고 요구했으므로, GROUP BY 연산이 필요할 것이다.
마지막으로 결과는 카테고리의 오름차순 이므로, ORDER BY 연산이 필요하다.
이제 결과 계산에 필요한 정보를 알아보자.
본 문제는 카테고리 별 총 판매량을 계산해야 한다.
카테고리 정보는 BOOK 테이블에 있으며, 판매량 정보는 BOOK_SALES 테이블에 있다.
따라서, 두 테이블을 JOIN 시켜야만 해결할 수 있다.
또한 2022년 1월 데이터만 추출해야 하지만, 본 문제의 날짜 컬럼은 2022-01-01로 포맷을 맞춰줘야 한다.
따라서 DATE_FORMAT 함수를 사용한다.
문제에서 제공된 컬럼은 %Y-%m-%d의 형태인데, 우리는 년도와 월만 알아내면 되므로,
%Y-%m 형태로 변환해준다.
JOIN해서 CATEGORY별로 GROUP BY를 하고, 그 때의 판매량, 즉 SALES 컬럼의 카테고리 별 합을 계산한다.
마지막으로, 카테고리 기준으로 오름차순 정렬을 함으로써 마무리 한다.
본 문제는 그렇게 해결할 수 있다.
정답코드
SELECT CATEGORY, SUM(SALES) as TOTAL_SALES
FROM BOOK_SALES INNER JOIN BOOK ON BOOK.BOOK_ID = BOOK_SALES.BOOK_ID
WHERE date_format(SALES_DATE, '%Y-%m') = '2022-01'
GROUP BY CATEGORY
ORDER BY CATEGORY
'DataScience > SQL' 카테고리의 다른 글
[SQLD] 1과목 개념 핵심요약 정리 (시험 전에 빠르게 훑어보기) (0) | 2025.03.07 |
---|---|
[PostgreSQL] SQL에서 Join 연산 개념 및 문법 정리 (INNER, RIGHT, LEFT, FULL, CROSS, SELF Join) (1) | 2024.10.22 |
[PostgreSQL] ALTER TABLE 문법 총정리 - 컬럼 추가, 이름 변경, 삭제 등 (0) | 2024.10.18 |
pymysql 오류 valueerror: unsupported format character (0) | 2024.09.27 |
[프로그래머스] MySQL 3월에 태어난 여성 회원 목록 출력하기 (0) | 2024.09.26 |