본문 바로가기

프로그래머스 풀이/Lv 3

카테고리 별 도서 판매량 집계하기 - SQL

728x90

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

 

프로그래머스

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

programmers.co.kr

 

두 테이블에서 각각 요소를 가져와야할 경우의 문제이다. 먼저 SQL의 처리 순서를 기억하자

 

 

  • FROM: 데이터를 조회할 테이블이나 뷰를 결정하고, 필요하면 조인(join)이나 서브쿼리를 통해 데이터를 결합합니다.
  • WHERE: 필터링 작업이 이 단계에서 이루어집니다. 주어진 조건에 맞는 행만을 선택합니다.
  • GROUP BY: 데이터가 그룹화되는 단계입니다. 같은 값을 가진 행들을 그룹으로 묶습니다.
  • HAVING: GROUP BY 이후에 그룹화된 데이터에 대한 필터링을 적용합니다. WHERE와는 다르게 그룹화된 데이터에 조건을 설정할 수 있습니다.
  • SELECT: 필요한 열(column)과 계산된 값을 선택하여 출력합니다.
  • DISTINCT: 중복된 결과를 제거합니다.
  • ORDER BY: 결과를 정렬합니다. 기본값은 오름차순(ASC)이지만 내림차순(DESC)도 가능합니다.
  • LIMIT/OFFSET: 반환할 행의 수를 제한합니다. (특정 데이터베이스에서는 TOP이나 FETCH를 사용하기도 합니다.)

고마워 챗지피티야!

 

그래서 이 문제의 경우 두 BOOK_ID가 같은 경우를 먼저 JOIN 하고 특정 날짜의 데이터만 존재하는 테이블로 처리해둔다. 그 다음 원하는 데이터를 그룹화하도록 한다. 여기선 카테고리별로 그룹화한다. 이제 그룹 함수들을 사용해 필요한 정보를 가져오면 된다.

 

SELECT CATEGORY, SUM(SALES) AS TOTAL_SALES FROM BOOK, BOOK_SALES
WHERE BOOK.BOOK_ID = BOOK_SALES.BOOK_ID
AND BOOK_SALES.SALES_DATE BETWEEN '2022-01-01' and '2022-01-31' 
GROUP BY BOOK.CATEGORY
ORDER BY BOOK.CATEGORY;