본문 바로가기
카테고리 없음

[SQL] 프로그래머스 고득점 kit - GROUP BY, JOIN / 카테고리 별 도서 판매량 집계하기

by pearhyunjin 2024. 3. 20.

Lv.3 카테고리 별 도서 판매량 집계하기

 

 

 

작성 답안

 

BOOK 테이블을 B로, BOOK_SALES 테이블을 S로 지정해서 JOIN에 이용한다.

결과값이 카테고리를 기준으로 출력되어야 하기 때문에 카테고리로 그룹화 하여 이용한다.

S 테이블에서 SALES 컬럼 값을 (카테고리별로) SUM 연산 해준 값을 TOTAL_SALES 컬럼으로 출력한다. 앞서 이후에 카테고리를 기준으로 그룹화 할 것을 예상했기 때문에 SUM 연산이 카테고리를 기준으로 이루어질 것임을 알 수 있다.

INNER JOIN을 이용해 B 테이블의 BOOK_ID와 S테이블의 BOOK_ID가 동일한 경우(교집합인 경우)를 출력한다.

이때, 2022년 1월 판매량을 파악하는것이기 때문에 LIKE를 이용해 조건을 걸어주고, 오름차순 정렬을 위해 ORDER BY 구문을 이용한다.

SELECT B.CATEGORY, SUM(S.SALES) AS TOTAL_SALES FROM BOOK AS B
INNER JOIN BOOK_SALES AS S ON B.BOOK_ID = S.BOOK_ID
WHERE S.SALES_DATE LIKE '2022-01%'
GROUP BY B.CATEGORY
ORDER BY B.CATEGORY ASC;

 

 


JOIN

두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것.

 

  • INNER JOIN
    기본 JOIN 방식
    두 테이블을 지정할 때, 두 테이블에서 모두 지정한 열의 데이터가 있어야 한다. (교집합)
  • OUTER JOIN
    두 테이블을 지정할 때, 1개의 테이블에만 데이터가 있어도 결과가 나온다. (합집합)
    - LEFT OUTER JOIN / RIGHT OUTER JOIN / FULL OUTER JOIN

https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/

 

  • CROSS JOIN
    한 테이블의 모든 행과 다른 테이블의 모든 행을 조인한다.
    결과의 전체 행의 개수는 두 테이블의 각 행의 개수를 곱한 수와 같다.
  • SELF JOIN
    자신과 조인하기 때문에 1개의 테이블을 사용한다.