<book> - 각 도서의 정보를 담은 테이블
<author> - 도서의 저자의 정보를 담은 테이
<book_sales> - 각 도서의 날짜 별 판매량 정보를 담은 테이블
<문제>
2022년 1월의 도서 판매 데이터를 기준으로 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하여, 저자ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES) 리스트를 출력하는 SQL문을 작성해주세요.
결과는 저자 ID를 오름차순으로, 저자 ID가 같다면 카테고리를 내림차순 정렬해주세요.
<나의 첫번쨰 풀이>
select c.author_id,
a.author_name,
c.category,
c.total_sales
from
(
select b.author_id,
b.category,
(b.price * s.sales) 'total_sales'
from book b inner join book_sales s on b.book_id=s.book_id
where s.sales_date like '2022-01%'
group by 1, 2
) c
inner join author a on c.author_id=a.author_id
order by c.author_id, c.category desc
① inner join + subquery 사용
- book 테이블과 book_sales 테이블에 있는 book_id로 조인 --> book b inner join book_sales s on b.book_id=s.book_id
- 문제에서 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하라고 했기 때문에 select 문에 저자아이디, 카테코리, 매출액을 total_sales --> select b.author_id, b.category, (b.price * s.sales) 'total_sales'
- 문제에서 2022년 1월 도서 판매 데이터를 기준이기 때문에 where문을 통해 22년도 1월 데이터만 뽑아내기 --> where s.sales_date like '2022-01%'
- 문제에서 저자 별, 카테고리 별이라고 했기 때문에 group by를 통해 각 각 그룹화 --> group by 1, 2
② 서브쿼리로 지정했던 c 와 남아있는 author 테이블 조인으로 합치기
- 서브쿼리 c테이블과 author 테이블을 author_id로 조인 --> inner join author a on c.author_id=a.author_id
- select에는 각 필요한 컬럼들 넣기 --> c.author_id, a.author_name, c.category, c.total_sales
- 문제에서 결과는 저자 ID를 오름차순으로, 저자 ID가 같다면 카테고리를 내림차순 정렬하라고 했기 때문에 order by를 사용하여 지정 --> order by c.author_id, c.category desc
<결과물>
이러고 제출하니 틀렸다고 나왔다 .....
난 맞게 했다고 생각했는데 뭐가 틀렸나 곰곰히 생각을 해봤다 생각해보니 .. 설마 내가 sum을 빼서 그런가라고 생각했다 ...
나는 총 매출액을 구하라기에 sum은 합계를 구하는거니 넣지 않아도 된다고 생각했다.
그래서 다시 sum을 넣고 해본 결과
<최종 풀이>
select c.author_id,
a.author_name,
c.category,
c.total_sales
from
(
select b.author_id,
b.category,
sum(b.price * s.sales) 'total_sales' #아까 코드에서 sum만 삽입
from book b inner join book_sales s on b.book_id=s.book_id
where s.sales_date like '2022-01%'
group by 1, 2
) c
inner join author a on c.author_id=a.author_id
order by c.author_id, c.category desc
<결과물>
아까는 계산이 되지 않았었던 건가 ....
오늘 문제를 계기로 sumd은 합계만 도출해내는것이 아니라는 것을 깨달았다!!
사실 이전 문제들 중에서도 이런 매출액을 구하는 문제가 있었을 것 같은데 순간적으로 판다스를 하다가 다시 SQL문제를 푸니 좀 혼동이 왔었던 것 같다.
머리에 깊에 박혔으니 그걸로 만족 :)
(풀이도 위의 sum뺀 풀이와 같으니 sum만 다시 추가하면 됨)
'CODEKATA' 카테고리의 다른 글
[MySQL] 그룹별 조건에 맞는 식당 목록 출력하기 (0) | 2024.08.02 |
---|---|
[Python] 없는 숫자 더하기 (0) | 2024.08.01 |
[MySQL] 주문량이 많은 아이스크림들 조회하기 (0) | 2024.07.31 |
[MySQL] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2024.07.25 |
[Python] 핸드폰 번호 가리기 (0) | 2024.07.22 |