테이블 index
BOOK
Column name | Type | Nullable | Description |
BOOK_ID | INTEGER | FALSE | 도서 ID |
CATEGORY | VARCHAR(N) | FALSE | 카테고리 (경제, 인문, 소설, 생활, 기술) |
AUTHOR_ID | INTEGER | FALSE | 저자 ID |
PRICE | INTEGER | FALSE | 판매가 (원) |
PUBLISHED_DATE | DATE | FALSE | 출판일 |
AUTHOR
Column name | Type | Nullable | Description |
AUTHOR_ID | INTEGER | FALSE | 저자 ID |
AUTHOR_NAME | VARCHAR(N) | FALSE | 저자명 |
BOOK_SALES
Column name | Type | Nullable | Description |
BOOK_ID | INTEGER | FALSE | 도서 ID |
SALES_DATE | DATE | FALSE | 판매일 |
SALES | INTEGER | FALSE | 판매량 |
문제
2022년 1월
의 도서 판매 데이터를 기준으로 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가
) 을 구하여, 저자 ID(AUTHOR_ID
), 저자명(AUTHOR_NAME
), 카테고리(CATEGORY
), 매출액(SALES
) 리스트를 출력하는 SQL문을 작성해주세요.결과는 저자 ID를 오름차순으로, 저자 ID가 같다면 카테고리를 내림차순 정렬해주세요.
예시


풀이
모든 테이블의 컬럼을 연결해서 조회 해야하기 때문에 우선 JOIN을 모두 해주었다.
SELECT *
FROM BOOK A
JOIN AUTHOR B ON A.AUTHOR_ID = B.AUTHOR_ID
JOIN BOOK_SALES C ON A.BOOK_ID = C.BOOK_ID
2022년 01월에 도서 판매량만 필요하기 때문에
where
문에 YEAR(해당년도만), MONTH(해당 월만)을 이용하여 조건을 걸어주었다SELECT *
FROM BOOK A
JOIN AUTHOR B ON A.AUTHOR_ID = B.AUTHOR_ID
JOIN BOOK_SALES C ON A.BOOK_ID = C.BOOK_ID
WHERE YEAR(c.SALES_DATE) = 2022 AND MONTH(c.SALES_DATE) = 1
TOTAL_SALES를 출력하기 위해서는 sum함수를 사용해야함으로 group by를 해야한다.
그룹으로 묶어야 할
column
은 author_id
, category
이다. 적는 순서에 따라 그룹이 먼저 묶이기 때문에 조심하여야한다. SELECT A.AUTHOR_ID, B.AUTHOR_NAME,A.CATEGORY
FROM BOOK A
JOIN AUTHOR B ON A.AUTHOR_ID = B.AUTHOR_ID
JOIN BOOK_SALES C ON A.BOOK_ID = C.BOOK_ID
WHERE YEAR(c.SALES_DATE) = 2022 AND MONTH(c.SALES_DATE) = 1
그룹으로 묶었음으로 sum함수가 사용 가능하다. 하지만 출판 일에 따른 가격이 다르기 때문에 가권수 * 가격 후 같은 카테고리의 책을 sum함수로 더해주면 된다.
SELECT *, sum(a.PRICE * c.SALES) TOTAL_SALES
FROM BOOK A
JOIN AUTHOR B ON A.AUTHOR_ID = B.AUTHOR_ID
JOIN BOOK_SALES C ON A.BOOK_ID = C.BOOK_ID
WHERE YEAR(c.SALES_DATE) = 2022 AND MONTH(c.SALES_DATE) = 1
group by b.author_id, a.category
이후 내가 필요한 컬럼만 출력 후 정렬을 해주었다.
SELECT a.AUTHOR_ID, b.AUTHOR_NAME, a.category, sum(a.PRICE * c.SALES) TOTAL_SALES
FROM BOOK A
JOIN AUTHOR B ON A.AUTHOR_ID = B.AUTHOR_ID
JOIN BOOK_SALES C ON A.BOOK_ID = C.BOOK_ID
WHERE YEAR(c.SALES_DATE) = 2022 AND MONTH(c.SALES_DATE) = 1
group by b.author_id, a.category
order by b.author_id, a.category desc


Share article