[GROUP BY] 저자 별 카테고리 별 매출액 집계하기

쥬쥬스·2023년 8월 22일
0

SQL

목록 보기
42/67
post-thumbnail

문제
2022년 1월의 도서 판매 데이터를 기준으로 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하여, 저자 ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES) 리스트를 출력하는 SQL문을 작성해주세요.
결과는 저자 ID를 오름차순으로, 저자 ID가 같다면 카테고리를 내림차순 정렬해주세요.

💡 조건

  • 2022년 1월의 도서 판매 데이터 기준
  • 저자, 카테고리별 매출액 = 판매량 * 판매가
  • 저자 ID, 저자명, 카테고리, 매출액
  • 저자 ID 오름차순, 카테고리 내림차순으로 조회

sql 코드

select a.author_id, a.author_name, b.category, sum(price*sales)
from book b left join (select book_id, sum(sales) as sales
                       from book_sales
                       where sales_date like '2022-01%'
                       group by book_id) bs on b.book_id = bs.book_id
            join author a on b.author_id = a.author_id
group by category, author_id
order by a.author_id asc, b.category desc
  1. 2022년 1월의 도서 판매 데이터 기준
  2. 저자, 카테고리별 매출액 = 판매량 * 판매가
  • 해당 조건을 같이 생각해서 문제를 해결했으므로 1,2는 묶어서 작성
    • 서브 쿼리로 BOOK_SALES 테이블로 해결할 수 있는 조건들을 작성했다. 얻고자하는 판매량을 서브쿼리에서 가져와서 판매가와 곱해주는 방식으로 문제를 해결했다
    • 날짜 조건은 LIKE를 사용해서 문자처럼 추출했다
    • 그리고 나서 book_id 가 같은 것들을 join 해주었다
	from book b left join (select book_id, sum(sales) as sales
                       from book_sales
                       where sales_date like '2022-01%'
                       group by book_id) bs on b.book_id = bs.book_id
  1. 저자 ID, 저자명, 카테고리, 매출액
    • author_name을 가져오는거에서 애를 먹었는데, join을 두개로 해주면 되는 부분이었다. SAELS_DATE로 한번 join 해주고, AUTHOR도 join 해주었다
	select a.author_id, a.author_name, b.category, sum(price*sales)
	from book b left join (select book_id, sum(sales) as sales
                       from book_sales
                       where sales_date like '2022-01%'
                       group by book_id) bs on b.book_id = bs.book_id
            join author a on b.author_id = a.author_id
	group by category, author_id

group by를 해준 이유
조건에서 저자별, 카테고리별 매출액을 구하라고 했음. 따라서 저자명이든 저자ID든 저자를 알 수 있는 것과 카테고리 두가지로 묶어서 group by를 해주었다.

  1. 저자 ID 오름차순, 카테고리 내림차순
	order by a.author_id asc, b.category desc
profile
느려도... 꾸준히.....🐌

0개의 댓글