SQL

[MySQL] 프로그래머스 카테고리 별 도서 판매량 집계하기(+Oracle)

랩실외톨이 2023. 1. 17. 15:52
반응형

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

 

프로그래머스

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

programmers.co.kr

 

1. 서론

 

MySQL이... Oracle보다 좋다라는 것을 깨닫게 해준 문제^^

 

2. 문제 풀이

 

BOOK : 각 도서의 정보를 담은 테이블

 

테이블 구조:

BOOK_ID: 도서 ID
CATEGORY: 카테고리 (경제, 인문, 소설, 생활, 기술)
AUTHOR_ID: 저자 ID
PRICE: 판매가 (원)
PUBLISHED_DATE: 출판일

 

BOOK_SALES : 각 도서의 날짜 별 판매량 정보를 담은 테이블

 

테이블 구조:

BOOK_ID: 도서 ID
SALES_DATE: 판매일
SALES: 판매량

 

Q. 2022년 1월의 카테고리 별 도서 판매량을 합산하고, 카테고리(CATEGORY), 총 판매량(TOTAL_SALES) 리스트를 출력하는 SQL문을 작성해주세요. 
결과는 카테고리명을 기준으로 오름차순 정렬해주세요.

 

'2022년 1월', '카테고리 별', '합산된 판매량'을 구하는 것이 포인트이다.

날짜부분에서 Oracle과 MySQL의 문법 차이가 발생한다.

MySQL은 그냥 date에서 like를 쓰면 조건이 걸려지는데

Oracle은 to_char를 이용해서 date를 잘라서 문자열로 만들어서 검색해야한다. (개불편)

 

카테고리 별 = group by

합산 = sum(not count)

 

3. 코드 설명

 

MySQL ver

 

select category, sum(sales) as total_sales
from book b, book_sales s
where sales_date like '2022-01%' and b.book_id = s.book_id
group by category
order by category

 

Oracle ver

 

select category, sum(sales) as total_sales
from book b, book_sales s
where to_char(sales_date, 'YYYY-MM') = '2022-01' and b.book_id = s.book_id
group by category
order by category

 

두 테이블의 값을 다 이용해야 하기 때문에 조인을 하고

book_id로 컬럼값들을 이어주고

sales_date에서 2022년 1월인 것 중에 같은 카테고리의 것들만 select하도록 조건을 줬다.

 

 

 

 

반응형