문제 설명
다음은 서점에서 구할 수 있는 책의 도서정보(BOOK)와 저자정보(AUTHOR)의 표이다.
책 테이블은 각 책에 대한 정보를 담고 있는 테이블로 다음과 같은 구조를 가진다.
열 이름 | 유형 | nullable | 설명 |
BOOK_ID | 정수 | 잘못된 | 책 ID |
범주 | VARCHAR(N) | 잘못된 | 범주(경제, 인문, 소설, 생활, 기술) |
AUTHOR_ID | 정수 | 잘못된 | 저자 ID |
가격 | 정수 | 잘못된 | 판매가격(원) |
출시일 | 날짜 | 잘못된 | 출시일 |
작가 테이블은 책의 저자 정보를 담고 있는 테이블로 다음과 같은 구조를 가진다.
열 이름 | 유형 | nullable | 설명 |
AUTHOR_ID | 정수 | 잘못된 | 저자 ID |
저자 이름 | VARCHAR(N) | 잘못된 | 저자 이름 |
BOOK_SALE 테이블은 각 권의 날짜별 판매 정보를 담고 있는 테이블로 아래와 같은 구조를 가지고 있습니다.
열 이름 | 유형 | nullable | 설명 |
BOOK_ID | 정수 | 잘못된 | 책 ID |
SALES_DATE | 날짜 | 잘못된 | 판매 날짜 |
판매 | 정수 | 잘못된 | 판매율 |
문제
2022년 1월의 도서 판매 데이터를 기준으로 저자 및 카테고리별 판매(TOTAL_SALES = 판매 * 판매 가격)이 검색되고 작성자 ID(AUTHOR_ID), 저자 이름(저자 이름), 범주(범주), 판매 (판매) 목록을 출력하는 SQL 문을 작성하십시오. 결과를 작성자 ID를 기준으로 오름차순으로 정렬하고, 작성자 ID가 동일한 경우 카테고리를 기준으로 내림차순으로 정렬합니다.
예
예를 들어 책 테이블과 작가 테이블, BOOK_SALE 테이블이 있을 때
BOOK_ID | 범주 | AUTHOR_ID | 가격 | 출시일 |
하나 | 인문학 | 하나 | 10000 | 2020년 1월 1일 |
2 | 사업 | 하나 | 9000 | 2021-02-05 |
삼 | 사업 | 2 | 9000 | 2021-03-11 |
AUTHOR_ID | 저자 이름 |
하나 | 홍길동 |
2 | 김영호 |
BOOK_ID | SALES_DATE | 판매 |
하나 | 2022년 1월 1일 | 2 |
2 | 2022-01-02 | 삼 |
하나 | 2022-01-05 | 하나 |
2 | 2022년 1월 20일 | 5 |
2 | 2022-01-21 | 6 |
삼 | 2022-01-22 | 2 |
2 | 2022-02-11 |
삼 |
2022년 1월 도서별 총 판매액은 도서 ID가 1 * 10,000원 = 30,000원인 도서가 총 3권, 도서 ID가 2 * 9,000 = 126,000원인 도서가 총 14권 및 도서 ID가 인 도서입니다.
3권은 총 2권 * 9,000 = 18,000원입니다.
카테고리별, 작가별 매출을 집계하면 다음과 같습니다.
AUTHOR_ID | 저자 이름 | 범주 | 총 매출 |
하나 | 홍길동 | 인문학 | 30000 |
하나 | 홍길동 | 사업 | 126000 |
2 | 김영호 | 사업 | 18000 |
작성자 ID, 범주 내림차순으로 정렬하면 다음과 같아야 합니다.
AUTHOR_ID | 저자 이름 | 범주 | 총 매출 |
하나 | 홍길동 | 인문학 | 30000 |
하나 | 홍길동 | 사업 | 126000 |
2 | 김영호 | 사업 | 18000 |
설명
SELECT A.AUTHOR_ID, C.AUTHOR_NAME, A.CATEGORY, SUM(B.SALES*A.PRICE)TOTAL_SALES
FROM BOOK A
INNER JOIN ( SELECT BOOK_ID, SUM(SALES) SALES
FROM BOOK_SALES
WHERE TO_CHAR(SALES_DATE, 'YYYY-MM') = '2022-01'
GROUP BY BOOK_ID) B
ON A.BOOK_ID = B.BOOK_ID
INNER JOIN AUTHOR C
ON A.AUTHOR_ID = C.AUTHOR_ID
GROUP BY A.AUTHOR_ID, C.AUTHOR_NAME, A.CATEGORY
ORDER BY 1, 3 DESC;
1. book 테이블을 기반으로 book_sales 테이블에 연결하여 판매 값의 합계(key – book_id)를 가져옵니다.
2. books 테이블을 기반으로 저자 테이블 및 저자 이름 정보를 가져옵니다.
(키 – author_id)
3. 세 개의 테이블을 여러 조인으로 결합하고 마지막으로 author_id, author_name 및 category별로 그룹화하여 sum()을 사용하여 total_sales를 가져옵니다.